CNode

基于socket.io实现的一对一聊天服务器和客户端

分享
Cchanywn发布于9 年前最后回复9 年前29 回复12949 浏览0 收藏

1645151993-59057c694d2a9_articlex.png

1577543365-59057c5536b15_articlex.png

github: https://github.com/chanywn/PrivateChat

如何使用

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

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

演示

并没有

查看回复

回复 (29)

G
guchenhui#1·9 年前

Mark From Noder

L
lastIndexOf#2·9 年前

界面好看

I
im-here#3·9 年前
引用 lastIndexOf界面好看

@lastIndexOf +1

C
chanywn#4·9 年前
引用 lastIndexOf界面好看

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

F
falost#5·9 年前

看起来不错,感谢分享

来自酷炫的 CNodeMD

N
nasaplayer#6·9 年前

发现神兽!少侠还缺男朋友不

T
tomoya92#7·9 年前

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

T
tomoya92#9·9 年前

@ydcwl 谢谢

C
chanywn#10·9 年前

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

T
tomoya92#11·9 年前

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

W
WinjayYu#12·9 年前

挺不错的 From Noder

T
tomoya92#13·9 年前

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

C
chanywn#14·9 年前

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

T
tomoya92#16·9 年前

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

N
nasaplayer#17·9 年前

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

C
chanywn#18·9 年前
C
chanywn#19·9 年前

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

M
ManInBoat#20·9 年前

棒棒哒! 值得借鉴

A
axetroy#21·9 年前

可以部署到heroku, 来个online demo

S
SmileLxy#22·9 年前

界面风格是仿的微信pc端的吧

T
thonatos#23·9 年前

socket.io 的 p2p 还是基于 room 实现,不过,注意看文档会发现,是 client 在加入时候,会 join 一个以 socket.id 命名的 room From Noder

A
anziguoer#24·9 年前

呵呵, 玩玩还是可以的

F
fairyly#25·9 年前

这个怎么可以在局域网用呢,目前用ip不行呀

Y
yanlele#26·9 年前

赶紧给个星,拖回来慢慢研究

C
chanywn#27·9 年前
引用 fairyly这个怎么可以在局域网用呢,目前用ip不行呀

@fairyly 可能需要修改 server.js 文件,修改 127.0.0.1 为 你实际局域网的IP

C
chanywn#28·9 年前
引用 fairyly这个怎么可以在局域网用呢,目前用ip不行呀

@fairyly 然后修改客户端代码,www目录下,找到 im.js 把ws连接地址修改成服务端IP

F
fairyly#29·9 年前

@chanywn谢谢

参与回复
登录后即可参与回复。登录