websocket通信协议实现的是基于浏览器的原生socket,在客户端用JS即可轻松完成,前些 天都在学习websocket 协议(但实际上websocket 协议甚为简约),并且粗略的思考过websocket的对于下一代web应用会产生怎样的影响,我想最大的巨变应该是就是实时性上吧!另外诸如上传大文件 之类的优于http的应用。但问题也随之而来,服务端怎么办?前些天我弄了个websocket 聊天室的demo,现在还得在服务器上专门开个进程来跑呢,也许到时候不再是简单架设个web server就能跑应用的了。也许过不了多久,会出不同的服务端方案吧!先期待一下。
websocket的协议是很简单的,这里我把它分成客户端和服务端来讲。在客户端,new WebSocket即可实例化一个新的websocket对象,但其参数略微有一点不一样,参数格式是这样的ws://yourdomain:port /path ,这个从我的聊天室demo里面就可以轻松看出(ws = new WebSocket( “ws://www.zendstudio.net:9108/chat” ); ),WebSocket对象会自动解析这段字符串,发送到指定服务器端口,首先执行的是双方握手(handshake),客户端发送数据格式类似这 样:
GET /chat HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: www.zendstudio.net:9108
Origin: http://www.zendstudio.net
Cookie: somenterCookie
这很是有些类似于http的头信息,同样每行都是以”\r\n”结尾的,上面这段格式无需我们去构造,WebSocket对象会自动发送,对客户端 这是透明的。此时服务端应该返回的信息是:
HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: http://www.zendstudio.net
WebSocket-Location: ws://www.zendstudio.net:9108/chat
从这里我们太容易看出来,websocket协议的握手部分根本就是个类http的协议,所不同的是http每次都会有这样子的头信息交互,这在某 些时候不得不显得很糟糕。而websocket只会执行一次这个过程,之后的传输信息就变得异常简洁了。
客户端在握手成功后,会触发WebSocket对象的onopen事件,告诉客户端连接已经成功建立了。客户端的WebSocket对象一共绑定了 四个事件:1、onopen:连接建立时触发;2、onmessage:收到服务端消息时触发;3、onerror:连接出错时触 发;4、onclose:连接关闭时触发;有了这4个事件,我们就可以很容易很轻松的驾驭websocket,并且需要说明的是 websocket支持二进制数据的传输,因此,它远不止聊天室应用这么简单。
服务端呢?服务端也是非常简单的,但是仍然需要注意的问题是,作为服务器,安全和性能是不可忽略的,除此之外,只管往socket里面写数据就可以 了,websocket的通信数据全部是以”\x00″开头以”\xFF”结尾的,无论是服务端发出的数据还是客户端发送的数据都遵从这个格式,唯一不同 的是客户端的WebSocket对象能够自动将头尾去除,获得主体数据,这就省却了我们在客户端处理原始数据的必要,真是个体贴周到的对象啊!顺便说一 句,WebSocket通信数据的编码总是UTF-8格式的。
好了,websocket协议就是这么简单。到这里,写一个服务端应该不是什么困难的事情了吧?这仅仅需要一点点socket编程知识,任何语言都 可以轻松实现。另外,我想说下源码的事情,有童鞋给我留言希望看看我的服务端源码,我想想还是算了,当我公布的源码徒增自己一堆麻烦,因为一部分人把我当 成写应用的了,他们总是会说:“这代码怎么不能用?”,或者说“你能再修改下源代码,以便实现下我们公司当前需要用到的XXX功能吗?”我本为技术交流, 之前公布飞信php源代码的时候,就遇到太多这样的情况,我并没有为飞信php建立项目,我不可能花很多时间去跟踪飞信协议变化,不断维护我的代码。同样 的,这次的websocket php服务端源代码我也不打算献丑了,还是不了。非常感谢大家持久以来的支持,希望我们能继续讨论技术本身。
转发自:http://www.oschina.net/bbs/thread/8897
分享到:
相关推荐
WebSocket是一种在客户端和服务器之间建立...总的来说,Nginx转发WebSocket接口需要理解WebSocket的协议特性,并正确配置Nginx以处理HTTP升级请求。通过调整相关参数和设置,可以实现高效且稳定的WebSocket代理服务。
在IT行业中,Spring Cloud Gateway作为Spring Cloud生态...结合Spring Cloud Gateway的路由和过滤器功能,不仅可以方便地转发WebSocket请求,还可以在请求处理过程中实现各种高级功能,提高系统的灵活性和可扩展性。
WebSocket协议是一种在客户端和服务器之间建立长连接的协议,它为双向通信提供了低延迟、高效的数据传输方式。在传统的HTTP协议中,每次请求-响应都需要重新建立连接,而WebSocket则在连接建立后可以保持长时间打开...
WebSocket是Web通信协议的一种,它为双向通信提供了标准机制,使得服务器和客户端可以实时、低延迟地交换数据。WebSocket协议的出现解决了HTTP协议在实时性上的不足,它在建立连接后,可以保持长时间的开放状态,...
WebSocket是一种在单个TCP连接上进行全双工通信的协议,它允许服务器主动向客户端推送数据,常用于实时通信场景。在Spring Boot中,我们可以使用`@ServerEndpoint`注解来创建WebSocket端点,如下所示: ```java ...
WebSocket 是一种在浏览器和服务器之间建立持久连接的协议,它允许双向通信,即服务器和客户端可以同时发送数据。WebSocket API 设计为低延迟且高效,非常适合实时应用,如在线游戏、股票交易、聊天应用等。 Netty ...
在这个框架中,WebSocket代理起着桥梁的作用,它允许Zorro-Trader与支持WebSocket的金融数据提供商进行通信。由于并非所有交易平台都原生支持WebSocket,因此这样的代理就显得尤为重要。它能够将Zorro-Trader的传统...
WebSocket提供了一种全双工的、低延迟的通信协议,使得客户端和服务器之间可以双向实时传输数据,而ActiveMQ则是一个开源的消息中间件,常用于解耦应用程序和实现异步通信。 WebSocket API 被设计为HTTP/1.1协议的...
总结来说,这个Java WebSocket服务端和客户端源码提供了一个实践平台,帮助开发者掌握WebSocket通信机制,理解南向与北向接口的交互,以及如何在Java环境中实现数据的转发功能。通过深入研究和实践,可以提升对网络...
WebSocket服务器是一种实现双向通信的网络协议,允许服务器和客户端之间建立持久连接,从而实现实时数据传输。在本文中,我们将深入探讨WebSocket服务器的工作原理、重要性以及如何使用WebSocket服务端来处理实时...
WebSocket是一种在客户端和服务器之间建立持久连接的协议,允许双向通信。相比于传统的HTTP长轮询或短轮询,WebSocket能提供更低延迟、更高效的实时通信。在Web应用程序中,WebSocket常用于实时更新、在线游戏、股票...
本文将深入探讨一个基于Python实现的简单代理,它能够将Websocket消息高效地转发到Unix套接字,同时也支持反向操作,即从Unix套接字接收消息并发送到Websocket客户端。这个工具名为"ws-unix-framed-bridge",它为...
总的来说,WebSocket聊天室的实现依赖于WebSocket协议的特性,它提供了高效、实时的通信方式,让在线聊天体验更加流畅。通过分析和理解`wechat-master`中的代码,我们可以深入学习WebSocket的使用和聊天室应用的开发...
WebSocket是一种在客户端与服务器之间建立持久连接的网络通信协议,设计用于实现低延迟、高效率的数据传输,尤其适合实时交互应用,如在线游戏、聊天室、股票交易等。相较于传统的HTTP协议,WebSocket允许数据双向...
`等选项来确保正确转发Websocket连接。 - **Tomcat配置**:Tomcat也需要进行相应的配置以支持Websocket,例如启用Websocket支持、调整最大连接数等。 #### 七、Websocket的编程接口 - **客户端API**:现代浏览器...
本主题聚焦于使用Fleck和WebSocketSharp两个库来实现WebSocket通信,这主要用于创建一个实时、双向的通信渠道,常见于股票交易系统、在线游戏等场景。在Windows桌面应用程序(Winform)开发中,C#语言提供了丰富的库...
- **概述**:WebSocket为互联网应用提供了一种全双工通信协议,允许服务器和客户端实时交互,而无需为每个请求/响应对都建立新的HTTP连接。 - **握手过程**:WebSocket通过HTTP/1.1或HTTP/2进行初始化,通过一个...
WebSocket协议是一种在客户端和服务器之间建立长连接的协议,常用于实现实时通信,如在线聊天、股票行情更新等场景。 首先,我们需要理解WebSocket的基本概念。WebSocket协议是HTML5引入的一种在单个TCP连接上进行...
WebSocket技术是一种在客户端和服务器之间建立长连接的协议,它为实时通信提供了高效、低延迟的解决方案。在传统的HTTP协议中,每次请求-响应交互都需要重新建立连接,而WebSocket则在连接建立后,允许双向数据流,...
ContainerSSH采用WebSocket协议,这是一种在TCP协议基础上建立的全双工通信协议,可以实现浏览器与服务器的长时间连接,从而提供低延迟、高效率的双向通信。在传统的SSH(Secure Shell)方式中,用户需要在容器内部...