首页 > 其他分享 >基于协程的,socket并发,server端永不断开

基于协程的,socket并发,server端永不断开

时间:2022-11-25 10:22:59浏览次数:42  
标签:协程 addr server print conn socket

基于协程的,socket并发,server端永不断开

class TCPserver():
    def server(self, server_ip, port):
        s = socket(AF_INET, SOCK_STREAM)
        s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
        s.bind((server_ip, port))
        s.listen(5)
        print(f'TCP服务启动成功 IP:{IP},PORT:{PORT}')
        self.socket = s
        while True:
            conn, addr = s.accept()
            res = conn.recv(1024)
            # 开启协程
            gevent.spawn(self.talk, conn, addr)
            self.genentlist.append(obj)


    def talk(self, conn, addr):
        with open('smartlabdemo/utils/tcpsocket.log', 'a') as f:
            f.write('开始监听 客户端 %s:%s \n' % (addr[0], addr[1]))
        print('开始监听 客户端 %s:%s' % (addr[0], addr[1]))
        try:
            conn.setsockopt(SOL_SOCKET, SO_KEEPALIVE, True)
            conn.ioctl(SIO_KEEPALIVE_VALS, (1, 1 * 1000, 1 * 1000))
            while True:
                try:
                    # 接收消息
                    res = conn.recv(1024)
                   	print(res)
                except Exception as e:
                    with open('smartlabdemo/utils/tcpsocket.log', 'a') as f:
                        f.write('客户端 %s:%s 断开连接\n' % (addr[0], addr[1]))
                    print('客户端 %s:%s 断开连接' % (addr[0], addr[1]))
                    conn.close()
                    print(e)
                    break
        except Exception as e:
            print(e)
        finally:
            conn.close()
            with open('smartlabdemo/utils/tcpsocket.log', 'a') as f:
                f.write('客户端 %s:%s 协程结束\n' % (addr[0], addr[1]))
            print('协程结束')
            
if __name__ == '__main__':
    while True:
        try:
            serve = TCPserver()
            serve.server(host, port)
        except Exception as e:
            with open('smartlabdemo/utils/tcpsocket.log', 'a') as f:
                f.write('TCPsocket出错,等待重启socket....\n')
            print('TCPsocket出错,等待重启socket....')
            continue            

标签:协程,addr,server,print,conn,socket
From: https://www.cnblogs.com/chunyouqudongwuyuan/p/16924303.html

相关文章

  • Socket 如何处理粘包
    Socket如何处理粘包什么是粘包什么是半包?粘包:比如发送了AABB两条消息,但是另一方接收到的消息却是AAB,像这种一次性读取了俩条数据的情况就是粘包半包:比如发送的消息......
  • WindowsServer域的安装与卸载
    搭建域服务器1.安装域控打开服务器管理器,点击右上角的管理,选择添加角色和功能一直点击下一步,直到选择服务器角色处,勾选ActiveDirectory域服务器一直下一步......
  • vscode配置live server不生效,原因居然是这个。
    今天想试一下vscode一个很方便的liveserver插件。 就简单写了一个demo代码,右键openwithliveserver也能正常打开浏览器,看到运行结果。然后改了内容保存,发现页面上没......
  • Windows server 2008 R2 多用户远程桌面配置详解(超过两个用户)
    这篇文章主要介绍了Windowsserver2008R2多用户远程桌面配置详解(超过两个用户),需要的朋友可以参考下 注意:一下是针对win2008 serverr2的操作1、创建三个本地......
  • SQL Server 中 Rank、row_number、dense_rank 三种排序函数的区别
    现有一张工资表,需要对其进行排名,工资相同的人并列排名,然后再排名,很多刚接触的小伙伴估计第一时间想到Rank()函数或row_number() 函数,但是结果出来后并不是自己想要的,在......
  • springboot解决server.context-path=/crud 不生效的问题
    原因:在springboot2.0.0之后,这个server.context-path过期了,换成了server.servlet.context-path=/crud这个配置。如此即可访问项目名th:src下的路径也被加上了crud的前缀......
  • JFinal整合spring的websocket
    在使用JFinal整合spring使用spring的websocket的时候,遇到了很多问题,下面介绍整合的全过程和要注意的点。(整个项目使用maven进行搭建,服务器用的是eclipse自带的jetty)1.整个po......
  • 企业如何利用 Serverless 快速扩展业务系统?
    作者:阿里云用户组2022年9月24日,阿里云用户组(AUG)第12期活动在厦门举办。活动现场,阿里云高级技术专家史明伟(花名:世如)向参会企业代表分享了《未来已来——从技术升级......
  • spring配置websocket并实现群发/单独发送消息
    spring框架中自带了websocket的jar包,利用它可以实现与H5中WebSocket的对接,甚至websocket还可以通过依赖注入与http请求一同工作,详细配置实现过程如下文件目录结构如下,主要是......
  • PHP配置连接SQL Server
    1.到https://www.microsoft.com/en-us/download/details.aspx?id=20098这个官网下载适合自己PHP版本MicrosoftDriversforPHPforSQLServer。2.下载完解压到PHP中ext文......