广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Node.js中使用socket创建私聊和公聊聊天室
  • 110
分享到

Node.js中使用socket创建私聊和公聊聊天室

和公Nodejs 2022-06-04 17:06:35 110人浏览 薄情痞子
摘要

先给大家展示效果图: 在上篇文章给大家介绍使用angular和nodejs、Socket.io搭建聊天室及多人聊天室,本文继续介绍node.js中使用socket创建私聊和公聊聊天室,具体详情请看下文吧。

先给大家展示效果图:

查看图片

在上篇文章给大家介绍使用angularnodejsSocket.io搭建聊天室及多人聊天室,本文继续介绍node.js中使用socket创建私聊和公聊聊天室,具体详情请看下文吧。

nodejs的应用中,关于socket应该是比较出彩的了,socket.io在GitHub上有几万人的star,它的成功应该是不输于express的,为了方便了解整个socket.io的使用.

例子请点击Http://chat.loveWEBgames.com/

源码下载https://github.com/tianxiangbing/chat

由于本人太穷,所以服务器数据库都是使用的国外免费的,访问速度上可以会稍慢。

先说下我对socket.io的理解,websocket更像是开启了一个端口服务,来监视过往的通讯。所以我们可以依赖于当前站点80端口启socket服务,也可以放于其他端口上,比如:

require('socket.io').listen(3000);

这样就是监视3000端口了,由于我用的免费服务器,没有权限打开其他端口,所以,我还是使用80了,由于80已经被express使用了,所以我只好在express使用的时候传进来了。

var server = http.createServer(app);

 var socket = require(‘./socket/msg')(server);

然后 我在msg.js里是这样写的

var db = require('../db/Mysql');

var sio = require('socket.io');

var IO = function(server) {

var io = sio.listen(server)

这样就和谐了,db是创建mysql连接的方法,不在本节内容里,略。

在socket.io里是这样的,首先创建一个io通道的连接,然后监视里面的socket的事件,nodejs是事件驱动嘛。代码如下:

io.on('connection', function(socket) {

        console.log('a user connected.');

        socket.on('disconnect', function() {

            console.log('user disconnected.');

        });

})

这时只要有用户连接上,就会进入connection中了,然后它的参数是个socket,如果是公聊,我们可以直接用

io.emit('chat message', {});

这种形式了。但我们这里是私聊,所以我们要临时的把这个socket对象保存在全局里,供与你私聊的对象使用找到你的socket,很绕口,其实这里的私聊,不算完全的点对点,它还是经过了服务器的,消息传给服务器,服务器再找到你要传达给的那个人的socket对象,发给他。这就是整个的过程了。这里我使用的是一个类数组对象来存储的.

var users = {},

usocket = {};

socket.on('user join', function(data) {

    users[username] = username;

    usocket[username] = socket;

})

由于我这里需要用户名登录,所以我就把用户名作为了唯一的标识(这只是一个例子,不要跟我谈用户名重复的情况),这里用类数组的形式的好处就是我不用循环也能够很快的找到它。再我给A发送私聊时,我会先在这个uscoket里面找到它,然后调用它的emit。


function sendUserMsg(data) {
 if (data.to in usocket) {
 console.log('================')
 console.log('to' + data.to, data);
 usocket[data.to].emit('to' + data.to, data);
 usocket[data.user].emit('to' + data.user, data);
 console.log('================')
 }
}

这里我emit了两次的原因是,我发给对方消息的同时,我自己也要收到这个消息,然后把它显示出来,为什么这样?其一,接口统一了,聊天里的内容全是服务器过来的,其二,证明我发送成功了。

然后我在客户端监听时,也用我自己的用户名起了一个to+用户名的事件监听。


socket.on('to' + user, function(data) {
 //console.log(data);
 fORMatMsg(data);
})

这样,不管是我发的消息,还是我收到消息,都会进入这个事件了。最后,在用户离开的时候别忘记delete掉这个对象。


socket.on('disconnect', function() {
 console.log('disconnect')
 if (username) {
 counter--;
 delete users[username];
 delete usocket[username];
 if (home.name == username) {
  homeLeave(username);
 }
 sendmsg({
  type: 0,
  msg: "用户<b>" + username + "</b>离开聊天室",
  counter: counter,
  users: users
 })
 }
});

好了,这样就大功告成了。

--结束END--

本文标题: Node.js中使用socket创建私聊和公聊聊天室

本文链接: https://www.lsjlt.com/news/13142.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Node.js中使用socket创建私聊和公聊聊天室
    先给大家展示效果图: 在上篇文章给大家介绍使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室,本文继续介绍Node.js中使用socket创建私聊和公聊聊天室,具体详情请看下文吧。...
    99+
    2022-06-04
    和公 Node js
  • 使用socket实现网络聊天室和私聊功能
    使用socket技术实现网络聊天室和私聊功能,具体内容如下话不多说先上图:聊天室群聊页面在线用户的联系人列表socket连接页面私聊页面项目介绍与服务端实现socket连接:每个客户端连接到服务器的时候,服务器会将每个连接的socket保存...
    99+
    2023-05-30
    socket 聊天室 私聊
  • 怎么使用java创建聊天室
    要使用Java创建一个聊天室,你需要以下步骤:1. 创建一个服务器端:创建一个Java类作为服务器,并使用Java的Socket和S...
    99+
    2023-09-17
    java
  • GO使用socket和channel实现简单控制台聊天室
    使用socket和channel,实现简单控制台聊天室 这里使用socket和channel,演示在GO中如何编写一个简单网络程序 功能分析 聊天室主要功能:用户可以加入/离开...
    99+
    2022-06-07
    Channel GO 聊天室 控制台 socket
  • 怎么在Java中使用Socket实现一个多人聊天室
    本篇文章给大家分享的是有关怎么在Java中使用Socket实现一个多人聊天室,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。流程首先建立一个服务器端,构建ServerSocket...
    99+
    2023-06-14
  • GO使用socket和channel怎么实现简单控制台聊天室
    今天就跟大家聊聊有关GO使用socket和channel怎么实现简单控制台聊天室,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。使用socket和channel,实现简单控制台聊天室这...
    99+
    2023-06-22
  • 怎么在Django中使用channels和websocket实现一个在线聊天室
    本篇文章为大家展示了怎么在Django中使用channels和websocket实现一个在线聊天室,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Channels是Django团队研发的一个给Djan...
    99+
    2023-06-15
  • 如何使用树莓派和Rocket.Chat构建一个私人聊天服务器
    这篇文章主要为大家展示了“如何使用树莓派和Rocket.Chat构建一个私人聊天服务器”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用树莓派和Rocket.Chat构建一个私人聊天服务器”...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作