基于socket.io实现的一对一聊天服务器和客户端
发布于 2 个月前 作者 chanywn 1219 次浏览 来自 分享

1645151993-59057c694d2a9_articlex.png

1577543365-59057c5536b15_articlex.png

github: https://github.com/chanywn/OneToOneChat

如何使用

  1. 安装 node.js
  2. 执行 npm install
  3. 执行 node server.js
  4. 访问 http://localhost:3000

使用 socket.io做多对多聊天很容易,做一对一的可以借鉴的资料却很少,如果你也想做一对一的聊天,我这个小 demo 希望对你帮助。 提示一点,核心的原理就是把用户的 socket id 保存起来,想和谁聊天,就使用对方的 socket id 发给他消息。 发送信息的格式可以是这样的 untitled1.png 谁给谁发了什么类型的消息 客户端收到后,就找这个人,并把消息显示出来(可以看到我这里是使用用户名来做用户标识的,如果是正式项目可以采用用户id)

演示

并没有

19 回复

@lastIndexOf 没办法,我这个人是外貌协会的,界面不好看怎么能忍

看起来不错,感谢分享

来自酷炫的 CNodeMD

<!– ┏┓   ┏┓ ┏┛┻━━━┛┻┓ ┃       ┃ ┃   ━   ┃ ┃ ┳┛ ┗┳ ┃ ┃       ┃ ┃   ┻   ┃ ┃       ┃ ┗━┓   ┏━┛   ┃   ┃   ┃   ┃   ┃   ┗━━━┓   ┃       ┣┓   ┃       ┏┛   ┗┓┓┏━┳┓┏┛    ┃┫┫ ┃┫┫    ┗┻┛ ┗┻┛ --> 发现神兽!少侠还缺男朋友不

@chanywn 请问你写这个的时候用到过点对点发消息的实现吗? 比如:A给B发消息,通过服务器转发,不通过room,直接发给B的实现 我在socket.io的api里没有找到

@liygheart 说一点,websocket 无法做到真正的点对点,只能通过服务器转发。这个 demo 就是 伪点对点的解决,看一下 github 上的服务端代码你就知道了

@chanywn 看来还是不支持呀。、

@chanywn socket.io有这样一个问题,不知道楼主发现了没? 如果把楼主im.js代码里的 // smalltalk.prompt('身份验证', '你的名字?', '').then(function(name) {去掉,换成 var name = Math.random().toString(36).substring(7); 每次随机生成一个名字,然后打开浏览器,一个劲的刷新,会出来一堆用户 图片.png 这个应该是在disconnect的时候没有及时的删掉弄的,但过个大约一分钟左右,用户又一个一个的被删掉了,这个算是个并发的bug吧,disconnect处理的太慢了

@liygheart 这个我也不知道,你研究出来了务必@我

@chanywn 我已经试过了,速度上慢了点,但不会出现上面提到的问题了,你可以试试

google浏览器表情包识别不了呢 12345.png

@nasaplayer 我的经验是,window和mac os 都不一样,windows版本不同也不一样,如果是灰色或者是不识别,就是系统没有这个 emoji。如果想要所有设备都有一致的效果,就用图片吧,用占位符替换输出

回到顶部