问一个在web页面做一个即时通讯功能的问题??

问题:就是在网站的首页做一个类似于QQ聊天界面的功能,不用很复杂,只要显示用户头像和发送的内容就行,也不用做聊天的记录。只要实时显示最新的20条记录即可?

clipboard.png

个人思路:由于功能比较单一,不是很复杂,而且显示的内容只需要最新的20条,所以我打算用,AJAX轮询的方法去做,当用户输入聊天记录后,把记录存入数据库(AJAX轮询实时读取数据库数据),然后获取数据后,显示在页面上。请问这么做可以吗?这样做,多个人聊天时会不会出现什么问题呢?比如数据显示在页面上时会很慢什么的?

websoket可以用来做这个,但是没用过,也不知道可不可以在windows服务器上使用(项目部署在windows上的)。

问题来了:请问各位有没有什么好的简单的方法呢?给点意见呗!!!!

阅读 7.3k
8 个回答

websocket或者socket.io就可以实现了, 这个和操作平台关系不是很大, 和你实现的web服务程序关系比较大, 因为你得选择一个一个web程序支持websocket或者socket.io. 我之前用node.js`实现过, 也是参考网上的例子, 你也可以参考下
Node.js + Web Socket 打造即时聊天程序嗨聊

AJAX轮询的话,多人聊天时候,每个终端都得不断去请求数据库数据,有以下几个缺点:

  1. 由于请求次数比较多,会增加服务器的压力。

  2. AJAX轮询本身比较慢

  3. 由于浏览器对于同一个域名下的AJAX请求数量有限制,所以数据交互的效率还是挺低的。

如果用WebSocket的话,我建议用nodeJSws做一个广播服务,可以挂起在Windows后台,也可以随意移植,相当方便,用到的库是这个:https://www.npmjs.com/package/ws
不得不说,NodeJS写的东西无论的可移植性、扩展性还是兼容性都是挺不错的。

具体操作就不说了,可以参见ws包的broadcase example示例来写。

可以使用workman或者swoole。

我觉得你可以采用socket.io方案,这个官网有开源方案,你可以直接拿过来用。

正常建议是websocket

如果非要用ajax实现的话,得分情况:
1、消息会很频繁,那么可以搞成定时去后端请求。比如:2秒请求一次。
2、消息比较少,那么就不要搞成定时。前端发一个请求到后端,后端判断是否有最新消息,如果有的话,就立即返回;如果没有,那么就暂时等着,在超时时间内 如果有消息了,再返回;如果快超时了,还没有消息,也返回空。前端收到返回信息,有则显示。然后再重新发个请求。。。
总之,一方面考虑消息的及时性,一方面考虑服务器性能。看你愿意牺牲哪个,优化哪个了。

如果你是前端 就用websocket ,php的话 可以考虑swoole

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题