我正在使用socket.io,并且安装迅速(这要归功于其用法页面上的示例),但我想了解有关幕后到底发生了什么以及使它起作用的技术的更多信息。
socket.io的确切机制是什么?
是在端口80上还是在另一个端口上?
它真的保持打开状态还是被模拟了?
有没有一种方法可以分析每个套接字事件?(有点像使用提琴手来查看ajax调用中会发生什么)
为了进行调试,您可能需要尝试 Theseus 。
这是 socket.io SPEC 的简短概述:
Socket.IO旨在将类似WebSocket的API引入许多浏览器和设备,并具有一些特定功能来帮助创建现实世界的实时应用程序和游戏。
- 多种传输支持(旧用户代理,移动浏览器等)。
- 同一连接(名称空间)下的多个套接字。
- 通过心跳进行断线检测。
- 可选的致谢。
- 带缓冲的重新连接支持(适用于移动设备或不良网络)
- 位于HTTP之上的轻量级协议。
Socket.IO套接字的剖析
Socket.IO客户端首先决定要用于连接的传输。
在Socket.IO插座的状态可以是
disconnected
,disconnecting
,connected
和connecting
。传输连接可以是
closed
,closing
,open
,和opening
。一个简单的HTTP握手在Socket.IO连接的开始进行。如果成功握手,则客户端将收到:
- 将为传输打开连接而提供的会话ID。
- 预期心跳的秒数(
heartbeat timeout
)- 如果未重新打开传输连接(
close timeout
),则认为套接字已断开,传输连接关闭后的秒数。
在这一点上,套接字被视为已连接,并且向传输器发送了信号以打开连接。
如果传输连接已关闭,则两端将缓冲消息,然后适当地对其进行构架,以便在恢复连接时将其作为批发送。
如果在协商的超时时间内未恢复连接,则认为套接字已断开连接。此时,客户端可能决定重新连接套接字,这意味着需要进行新的握手。
如果您需要更多详细信息,则可以在此处阅读本规范的其余部分。
问题内容: (我对RESTFul不熟悉,如果我的概念有误,请纠正我) 在RESTFul体系结构中,我们将每个操作映射到URL。如果我单击“发布文章”,可能实际上是URL 和一些数据。 如果我要发布而不是刷新整个网页,则可以使用javascript的XMLHTTPRequest。我发布它,然后获取它的内容,并将其插入到页面的div中。这些动作都是异步的。 然后我知道有一个名为的东西,它是包装器。它使
问题内容: 假设服务器获得了10,000个并发连接(通过socket.io)。太多了,如果它再也处理不了,我需要启动另一台服务器。 如何将两个服务器及其socket.io同步? 问题答案: 您可以尝试使用例如群集模块并将负载分配到多个内核(如果您有多核CPU)。如果这还不够,您可以尝试使用反向代理在多个服务器之间分配请求,并将Redis作为中央会话数据存储(如果您的方案可行)。
问题内容: 我已经使用Socket.IO了几天,这既令人兴奋又令人沮丧。缺少当前的文档/教程使学习变得非常困难。我终于设法创建了一个基本的聊天系统,但是有一个明显的问题。如何保护它? 是什么阻止了恶意用户复制(或编辑)我的代码并连接到我的服务器?我可以从我的PHP脚本中获取用户名并将其提交给Socket.IO,这样我就可以将他们识别为该用户(当然,PHP具有安全性),但是又是什么阻止了某人仅提交未
问题内容: 所以我试图让Session在我的socket.on(’connection’,…)内部工作,我试图使用最新版本进行工作:Socket.io-0.9.13,Express-3.1.0和最新版本其他模块。 无论如何,我都尝试过使用两个模块’ connect-redis ‘和’ session.socket.io ‘,它们都有类似的问题。 在我的代码中,我有2个redis存储(socketi
问题内容: 我有这个Node.JS 服务器 : 客户端代码: 问题在于它似乎仅在本地工作。在ubuntu chrome上,我得到: 在Mac上,同一文件出现GET错误… 对可能是什么问题有任何想法吗? 问题答案: 网站的域名与托管位置无关,而与您用来访问它的URL有关。 即使“ 192.168.1.130”和“ localhost”解析到同一服务器,它们也被视为不同的域。 结果,因为您具有客户端代
我是socket.io而不是node.js的新手,我发现socket.io网站上的文档不够好,不能开始,在真正的项目中有没有从socket.io开始的好参考资料