socket通信

深入探析 socket

吃可爱长大的小学妹 提交于 2019-11-26 17:10:22
  最近浏览了几篇有关Socket发送消息的文章,发现大家对Socket Send方法理解有所偏差,现将自己在开发过程中对Socket的领悟写出来,以供大家参考。   (一)架构   基于TCP协议的Socket通信,架构类似于B/S架构,一个Socket通信服务器,多个Socket通信客户端。Socket通信服务器启动时,会建立一个侦听Socket,侦听Socket将侦听到的Socket连接传给接受Socket,然后由接受Socket完成接受、发送消息,当Socket存在异常时,断开连接。在实际开发项目中,往往要求Socket通信服务器能提供高效、稳定的服务,一般会用到以下技术:双工通信、完成端口、SAEA、池、多线程、异步等。特别是池,用的比较多,池一般包括一下几种: 1)Buffer池,用于集中管控Socket缓冲区,防止内存碎片。 2)SAEA池,用于集中管控Socket,重复利用Socket。 3)SQL池,用于分离网络服务层与数据访问层(SQL的执行效率远远低于网络层执行效率)。 4)线程池,用于从线程池中调用空闲线程执行业务逻辑,进一步提高网络层运行效率。   (二)Send   主服务器接受Socket为一端口,客户端Socket为一端口,这两个端口通过TCP协议建立连接,通信基础系统负责管理此连接,它有两个功能:   1)发送消息   2)接受消息  

nginx配置socket连接

佐手、 提交于 2019-11-26 14:02:44
author: headsen chen date: 2019-08-08 18:52:36 notice :个人原创 Nginx通过在客户端和后端服务器之间建立隧道来支持WebSockets通信。为了让Nginx可以将来自客户端的Upgrade请求发送到后端服务器,Upgrade和Connection的头信息必须被显式的设置。如下所示: location /wsapp/ { proxy_pass http://wsbackend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } 一旦我们完成以上设置,Nginx就可以处理WebSocket连接了。 生产配置实例: [root@beta-aaa01:/usr/local/openresty/nginx/conf/locations]$cat location aaa.bbbb.cn.conf location / { proxy_pass http://10.0.0.3:8702/; proxy_http_version 1.1; proxy_redirect off; proxy_buffering off; proxy_set_header X-NginX-Proxy

一文读懂即时通讯应用中的网络心跳包机制:作用、原理、实现思路等

ぐ巨炮叔叔 提交于 2019-11-26 12:34:34
本文原文由作者“张小方”原创发布于“高性能服务器开发”微信公众号,原题《心跳包机制设计详解》,即时通讯网收录时有改动。 1、引言 一般来说,没有真正动手做过网络通信应用的开发者,很难想象即时通讯应用中的心跳机制的作用。但不可否认,作为即时通讯应用,心跳机制是其网络通信技术底层中非常重要的一环,有没有心跳机制、心跳机制的算法实现好坏,都将直接影响即时通讯应用在应用层的表现——比如:实时性、断网自愈能力、弱网体验等等。 总之,要想真正理解即时通讯应用底层的开发,心跳机制必须掌握,而这也是本文写作的目的,希望能带给你启发。 需要说明的是:本文中涉及的示例代码是使用 C/C++ 语言编写,但是本文中介绍的心跳包机制设计思路和注意事项,都是是些普适性原理,同样适用于其他编程语言。虽然语言可以不同,但逻辑不会有差别! 学习交流: - 即时通讯/推送技术开发交流4群: 101279154 [推荐] - 移动端IM开发入门文章:《 新手入门一篇就够:从零开发移动端IM 》 (本文同步发布于: http://www.52im.net/thread-2697-1-1.html ) 2、相关文章 《 为何基于TCP协议的移动端IM仍然需要心跳保活机制? 》( 推荐 ) 《 微信团队原创分享:Android版微信后台保活实战分享(网络保活篇) 》( 推荐 ) 《 移动端IM实践

python:socket通信

ε祈祈猫儿з 提交于 2019-11-26 03:43:18
socket_server_ssh.py编码如下: import socket,os server=socket.socket() server.bind(("localhost",9999)) server.listen() while True: ---conn,addr=server.accept() #等电话 ---print("new connet。。。",addr) ---while True: ---print("等待新指令....") ---data=conn.recv(1024) ---if not data: ------print("客户端已断开") ------break ---cmd_res=os.popen(data.decode()).read() #接受字符串,执行结果也是字符串 ---if len(cmd_res)==0: ------print("cmd_res has not output。。。") ---conn.send((str(len(cmd_res.encode())).encode("utf-8")) ---conn.send(cmd_res.encode("utf-8")) server.close() socket_server_client.py编码如下: import socket client=socket.socket(