基于WebSocket的聊天室(解决轮询和长连接的缺点)

websocket是HTML5重要的功能之一,websokcet的目的是实现通信功能。

先比较正常的HTTP请求和websocket通信,

正常情况:页面所在web服务器发送一个HTTP请求。web服务器识别请求,然后返回响应。轮询便是定时发送HTTP请求,有时候并不能达到实时通讯。

长连接原理跟轮询差不多,都是采用轮询的方式,不过采取的是阻塞模型,客户端发起连接后,如果没消息,就一直不返回Response给客户端。直到有消息才返回,返回完之后,客户端再次建立连接,周而复始。这样加大了服务器的压力。

而websocket提供了双向的、按序到达的数据流,一但连接成功,就可以在全双工模式下在客户端和服务器之间来回传送websocket消息。

wesocket的优点如下:

1、服务器与客户端之间交换的标头信息很小。

2、客户端与服务器都可以主动传送数据给对方。

3、不用频率创建TCP请求及销毁请求,减少网络宽带资源的占用,同时也节省服务器资源。

既然这么多优点我也就开始查看websocket api 然后尝试了做一个简单的聊天室。

websocket需要先实例化 new WebSocket(url,protocol)

                url 为 ws:// 或 wss:// 前缀加上服务器地址 例如:ws://localhost:3000

                protocol(可选)为能够使用的协议,可以是字符串也可以是数组

websocket遵循异步编程,不需要主动轮询。websocket对象有4个事件

onopen:当建立连接时触发

onmessage:当有消息接收时触发

onclose:当连接关闭时触发

onerror:当发生错误时触发

1个方法

send:用来发送消息

最开始打算用php做,网上查看了一些,但是一直失败所以选择了node,还请各位大神能给个php的源码

这是我基于Node.js+websocket做的聊天室:github.com/wenlei0617/node-websocket

浏览器的兼容性现在也是很好的,所以可以放心使用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,264评论 19 139
  • WebSocket简介 谈到Web实时推送,就不得不说WebSocket。在WebSocket出现之前,很多网站为...
    吧啦啦小汤圆阅读 12,538评论 15 75
  • 柳叶还未变黄 秋韵还未细细欣赏 一夜寒风乍作 冬 来的猝不及防 远方的朋友啊 你是否添加了衣裳
    启明星子阅读 2,187评论 0 1
  • 假期(九) 文||与你相识 从你的梦里 送来一缕微笑 那些甜蜜 幸福的写在脸上 从炎热里 抽取一些清凉 让雨自由飞...
    与你相识_40fa阅读 1,720评论 1 4
  • 文|沙白 春天到了,已经到了很久了。叶子绿了很长一段时间,花开了又谢,雨水洗了一次又一次,偶尔一阵风擦过身边,伴随...
    沙白阅读 3,733评论 0 4

友情链接更多精彩内容