04协程番外:IO多路复用之select服务器案例第一版

Python的select使用关键点就select模块的select函数
import select
readables,writeables,exceptions=select.select(readable_list,writeable_list,exception_list,time_out) #1
每执行 1 这句话话,
情况一:
time_out为空的情况下,select会监听:
readable_list中的资源是否可读,将读就绪的资源返回到readables
writeable_list中的资源是否可写,将写就绪的资源返回到writeables
exception_list中的资源是否发生异常,将发生异常的资源放入exceptions
当所有资源都没有就绪的时候,select.select会阻塞当前线程,直到有某个资源就绪,然后返回
情况二:
time_out不为空的情况下,select会监听:
readable_list中的资源是否可读,将读就绪的资源返回到readables
writeable_list中的资源是否可写,将写就绪的资源返回到writeables
exception_list中的资源是否发生异常,将发生异常的资源放入exceptions
当所有资源都没有就绪的时候,select.select会阻塞当前线程,直到在time_out时间内有某个资源就绪,然后返回;如果在timeout时间内没有资源就绪,那就返回三个空列表,也就是readables=writerables=exceptisons=[]

import select
import socket
import time
SERVER_HOST=('127.0.0.1',9999)

class Select_Server_01:
    '''
    使用select和可读队列,可写队列实现服务器
    '''
    def __init__(self):
        #创建套接字
        self.server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        #绑定端口
        self.server_socket.bind(SERVER_HOST)
        #设置为监听套接字
        self.server_socket.listen(5)
        #可读就绪资源列表
        self.readable_list=[self.server_socket]
        #可写就绪资源列表
        self.writeable_list=[]
        '''
        存储客户端socket传递过来的参数
        存储结构如下
        键为:客户端socket对象,值为socket对象传入的值
        '''
        self.client_socket_args={}

    def handle_request(self,request_args):
        #根据传入参数返回对应的参数
        return "{}时刻,经过不负责任的socket处理过的数据:{}".format(time.time(),request_args)

    '''
    服务器运行核心,通过while循环 
    '''
    def run(self):
        """
        主循环,不断循环处理可读与可写队列
        :return:
        """
        while True:
            #select检查并返回可读与可写列表中那些就绪的socket
            readables,writerables,exceptions=select.select(self.readable_list,self.writeable_list,[])

            #处理每个可读的socket
            for readable_item in readables:
                if readable_item==self.server_socket: #如果可读就绪的是服务器socket,则表示有新的客户端接入
                    client_socket,client_socket_address=readable_item.accept()
                    #将新的客户端socket存入可读列表
                    self.readable_list.append(client_socket)
                    print('接收到新socket:{}'.format(client_socket))
                else:   #除了服务器socket就是客户端socket可读了,我们这里接收一下客户端socket数据(这里是普通参数)
                    recv_data=readable_item.recv(1024).decode('utf-8')  #这是一个堵塞操作,客户端最好不要一次发送太多的数据
                    if recv_data=='':
                        #如果客户端发送空字符串,表示自己要关闭,所以我们要清除这个客户端
                        #先关闭掉它
                        try:
                            readable_item.close()
                        except:
                            pass
                        #从客户端请求参数列表中清除
                        if readable_item in self.client_socket_args:
                            del self.client_socket_args[readable_item]
                        #从可读队列中清除
                        if readable_item in self.readable_list:
                            self.readable_list.remove(readable_item)
                        #从可写队列中清除
                        if readable_item in self.writeable_list:
                            self.writeable_list.remove(readable_item)
                        #从本轮的写就绪队列中删除(因为我们接下来会处理可写socket)
                        if readable_item in writerables:
                            writerables.remove(readable_item)
                        print('清除socket:{}'.format(readable_item))
                    elif recv_data!='CLOSE_SERVER_ZHOUYUQING':
                        #将请求参数存入客户端请求参数字典
                        self.client_socket_args[readable_item]=recv_data
                        #接下来我们要将客户端socket放入可写队列
                        if readable_item not in self.writeable_list:
                            self.writeable_list.append(readable_item)
                        print('处理socket:{}'.format(readable_item))
                    else: #客户端发过来是关闭指令
                        self.close()
                        return
            #处理每个可写的socket
            for writeable_item in writerables:
                #获取这个socket对应传入参数
                client_send_data=self.client_socket_args.get(writeable_item)
                #向可写socket发送数据
                print('当前关于该socket:{} 的传入参数是:{}'.format(writeable_item,client_send_data))
                writeable_item.send(self.handle_request(client_send_data).encode('utf-8')) #阻塞操作
                print('发送数据给:{}'.format(writeable_item))
                #处理完这个可读socket后从可读队列中删除,知道它再次发送请求参数过来才会被添加到可读队列中
                self.writeable_list.remove(writeable_item)


    '''
    关闭select_socket服务器
    '''
    def close(self):
        #关闭所有存在的socket
        for _socket in self.readable_list+self.writeable_list:
            try:
                _socket.close()
            except:
                pass
        print('服务器执行关闭所有操作')

class Client_Socket_01:
    '''
    测试客户端socket
    '''
    def __init__(self):
        self.client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    def run(self,info,num):
        self.client_socket.connect(SERVER_HOST)
        for _ in range(num):
            self.client_socket.send(info.encode('utf-8'))
            print('\n\n         {} 接收响应:{}\n\n'.format(info,self.client_socket.recv(1024).decode('utf-8')))

        #发送关闭动作(发送一个为空字符串)
        self.client_socket.send(''.encode('utf-8'))
        try:
            self.client_socket.close()
        except:
            pass

import multiprocessing
def main_01():
    #先启动服务器
    server_socket=Select_Server_01()
    multiprocessing.Process(target=server_socket.run).start()

    #启动测试客户端
    client_socket_01=Client_Socket_01()
    multiprocessing.Process(target=client_socket_01.run,args=('测试客户端1',1)).start()
    client_socket_02=Client_Socket_01()
    multiprocessing.Process(target=client_socket_02.run,args=('测试客户端2',3)).start()
    client_socket_03=Client_Socket_01()
    multiprocessing.Process(target=client_socket_03.run,args=('测试客户端3',6)).start()
    client_socket_04=Client_Socket_01()
    multiprocessing.Process(target=client_socket_04.run,args=('测试客户端4',9)).start()

    #创建一个客户端发送一个关闭指令给服务器
    time.sleep(30) #这句话很重要,你不要一上来就把服务器关了
    final_client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    final_client_socket.connect(SERVER_HOST)
    final_client_socket.send('CLOSE_SERVER_ZHOUYUQING'.encode('utf-8'))
    try:
        final_client_socket.close()
    except:
        pass
    print('-------------------------->>>>>>>>>>>>>>>>执行关闭服务器完毕')

"""
执行:
    main_01()
执行结果:

    接收到新socket:<socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34416)>
    接收到新socket:<socket.socket fd=7, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34418)>
    处理socket:<socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34416)>
    当前关于该socket:<socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34416)> 的传入参数是:测试客户端1
    发送数据给:<socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34416)>


             测试客户端1 接收响应:1548409232.0193949时刻,经过不负责任的socket处理过的数据:测试客户端1


    处理socket:<socket.socket fd=7, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34418)>
    当前关于该socket:<socket.socket fd=7, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34418)> 的传入参数是:测试客户端2
    发送数据给:<socket.socket fd=7, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34418)>


             测试客户端2 接收响应:1548409232.0195627时刻,经过不负责任的socket处理过的数据:测试客户端2


    处理socket:<socket.socket fd=7, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34418)>
    当前关于该socket:<socket.socket fd=7, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34418)> 的传入参数是:测试客户端2
    发送数据给:<socket.socket fd=7, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34418)>


             测试客户端2 接收响应:1548409232.0199127时刻,经过不负责任的socket处理过的数据:测试客户端2


    处理socket:<socket.socket fd=7, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34418)>
    当前关于该socket:<socket.socket fd=7, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34418)> 的传入参数是:测试客户端2
    发送数据给:<socket.socket fd=7, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34418)>
    接收到新socket:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)>
    处理socket:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)>
    当前关于该socket:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)> 的传入参数是:测试客户端3
    发送数据给:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)>


             测试客户端3 接收响应:1548409232.0201845时刻,经过不负责任的socket处理过的数据:测试客户端3



             测试客户端2 接收响应:1548409232.020043时刻,经过不负责任的socket处理过的数据:测试客户端2



    处理socket:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)>
    当前关于该socket:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)> 的传入参数是:测试客户端3
    发送数据给:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)>


             测试客户端3 接收响应:1548409232.020338时刻,经过不负责任的socket处理过的数据:测试客户端3


    处理socket:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)>
    当前关于该socket:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)> 的传入参数是:测试客户端3
    发送数据给:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)>
    接收到新socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>
    处理socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>
    当前关于该socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)> 的传入参数是:测试客户端4
    发送数据给:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>


             测试客户端4 接收响应:1548409232.0205855时刻,经过不负责任的socket处理过的数据:测试客户端4



             测试客户端3 接收响应:1548409232.020468时刻,经过不负责任的socket处理过的数据:测试客户端3



    处理socket:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)>
    处理socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>
    当前关于该socket:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)> 的传入参数是:测试客户端3


             测试客户端3 接收响应:1548409232.0207088时刻,经过不负责任的socket处理过的数据:测试客户端3


    发送数据给:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)>
    当前关于该socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)> 的传入参数是:测试客户端4
    发送数据给:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>
    处理socket:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)>
    当前关于该socket:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)> 的传入参数是:测试客户端3


             测试客户端3 接收响应:1548409232.0208163时刻,经过不负责任的socket处理过的数据:测试客户端3


    发送数据给:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)>
    处理socket:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)>
    当前关于该socket:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)> 的传入参数是:测试客户端3


             测试客户端3 接收响应:1548409232.0208836时刻,经过不负责任的socket处理过的数据:测试客户端3


    发送数据给:<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34422)>


             测试客户端4 接收响应:1548409232.0207596时刻,经过不负责任的socket处理过的数据:测试客户端4


    处理socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>
    当前关于该socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)> 的传入参数是:测试客户端4
    发送数据给:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>


             测试客户端4 接收响应:1548409232.0210006时刻,经过不负责任的socket处理过的数据:测试客户端4


    处理socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>
    当前关于该socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)> 的传入参数是:测试客户端4
    发送数据给:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>


             测试客户端4 接收响应:1548409232.0211372时刻,经过不负责任的socket处理过的数据:测试客户端4


    处理socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>
    当前关于该socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)> 的传入参数是:测试客户端4
    发送数据给:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>


             测试客户端4 接收响应:1548409232.021273时刻,经过不负责任的socket处理过的数据:测试客户端4


    处理socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>
    当前关于该socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)> 的传入参数是:测试客户端4


             测试客户端4 接收响应:1548409232.0214124时刻,经过不负责任的socket处理过的数据:测试客户端4


    发送数据给:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>
    处理socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>
    当前关于该socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)> 的传入参数是:测试客户端4


             测试客户端4 接收响应:1548409232.021508时刻,经过不负责任的socket处理过的数据:测试客户端4


    发送数据给:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>
    处理socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>
    当前关于该socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)> 的传入参数是:测试客户端4


             测试客户端4 接收响应:1548409232.0216038时刻,经过不负责任的socket处理过的数据:测试客户端4


    发送数据给:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>
    处理socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>
    当前关于该socket:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)> 的传入参数是:测试客户端4


             测试客户端4 接收响应:1548409232.0217009时刻,经过不负责任的socket处理过的数据:测试客户端4


    发送数据给:<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34424)>
    -------------------------->>>>>>>>>>>>>>>>执行关闭服务器完毕
    接收到新socket:<socket.socket fd=10, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 34438)>
    服务器执行关闭所有操作  
    
"""

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容