github: https://github.com/chanywn/OneToOneChat
如何使用
- 安装 node.js
- 执行 npm install
- 执行 node server.js
- 访问 http://localhost:3000
使用 socket.io做多对多聊天很容易,做一对一的可以借鉴的资料却很少,如果你也想做一对一的聊天,我这个小 demo 希望对你帮助。 提示一点,核心的原理就是把用户的 socket id 保存起来,想和谁聊天,就使用对方的 socket id 发给他消息。 发送信息的格式可以是这样的 谁给谁发了什么类型的消息 客户端收到后,就找这个人,并把消息显示出来(可以看到我这里是使用用户名来做用户标识的,如果是正式项目可以采用用户id)
演示
并没有
Mark From Noder
界面好看
@lastIndexOf +1
@lastIndexOf 没办法,我这个人是外貌协会的,界面不好看怎么能忍
看起来不错,感谢分享
来自酷炫的 CNodeMD
<!– ┏┓ ┏┓ ┏┛┻━━━┛┻┓ ┃ ┃ ┃ ━ ┃ ┃ ┳┛ ┗┳ ┃ ┃ ┃ ┃ ┻ ┃ ┃ ┃ ┗━┓ ┏━┛ ┃ ┃ ┃ ┃ ┃ ┗━━━┓ ┃ ┣┓ ┃ ┏┛ ┗┓┓┏━┳┓┏┛ ┃┫┫ ┃┫┫ ┗┻┛ ┗┻┛ --> 发现神兽!少侠还缺男朋友不
@chanywn 请问你写这个的时候用到过点对点发消息的实现吗? 比如:A给B发消息,通过服务器转发,不通过room,直接发给B的实现 我在socket.io的api里没有找到
@liygheart 用socket.to(id).emit()
来自酷炫的 CNodeMD
@ydcwl 谢谢
@liygheart 说一点,websocket 无法做到真正的点对点,只能通过服务器转发。这个 demo 就是 伪点对点的解决,看一下 github 上的服务端代码你就知道了
@chanywn 看来还是不支持呀。、
挺不错的 From Noder
@chanywn socket.io有这样一个问题,不知道楼主发现了没?
如果把楼主im.js代码里的 // smalltalk.prompt('身份验证', '你的名字?', '').then(function(name) {
去掉,换成 var name = Math.random().toString(36).substring(7);
每次随机生成一个名字,然后打开浏览器,一个劲的刷新,会出来一堆用户
这个应该是在disconnect的时候没有及时的删掉弄的,但过个大约一分钟左右,用户又一个一个的被删掉了,这个算是个并发的bug吧,disconnect处理的太慢了
@liygheart 这个我也不知道,你研究出来了务必@我
@chanywn 我已经试过了,速度上慢了点,但不会出现上面提到的问题了,你可以试试
google浏览器表情包识别不了呢
@liygheart nice
@nasaplayer 我的经验是,window和mac os 都不一样,windows版本不同也不一样,如果是灰色或者是不识别,就是系统没有这个 emoji。如果想要所有设备都有一致的效果,就用图片吧,用占位符替换输出