下面是讲解“node.js用socket实现聊天的示例代码的完整攻略”。
1.准备工作
首先,我们需要准备node.js环境。你可以在官网上下载对应的安装包,安装完成后,打开命令行工具,输入命令 node -v
,如果命令行中输出你的node.js版本号,则说明你已经成功安装node.js环境。如果没有,则需要重新检查安装。
接下来,我们需要安装socket.io模块,可以使用npm来安装。进入命令行终端,输入命令npm install socket.io --save
。
2.代码实现
具体实现过程中,首先需要创建一个简单的聊天室页面,然后,通过socket技术将网页与服务端实现双向通信,即服务器可以向客户端发送消息,客户端也可以向服务器发送消息,从而实现聊天室的实时交互。
这里我们先给出服务端的代码。
var app = require('http').createServer(handler)
var io = require('socket.io')(app);
var fs = require('fs');
app.listen(3000);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.on('connection', function (socket) {
socket.emit('message', {message: 'Welcome to the chat room!'});
socket.on('send', function (data) {
io.sockets.emit('message', data);
});
});
上面代码是一个非常简单的node.js程序,其中:
- 引入http、socket.io和fs模块;
- 创建一个http服务器并将其连接到socket.io上;
- 设置服务器监听3000端口,启动成功则可打开浏览器访问页面;
- 如果发现错误,则返回错误信息;
- 当客户端与服务器建立连接时,发送欢迎消息;
- 当客户端发送消息时,将消息发送给所有客户端。
客户端的代码可以采用index.html实现,关键代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Chat Room</title>
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
</head>
<body>
<ul id="messages"></ul>
<div class="chat-box">
<form id="chatForm" action="">
<input id="m" autocomplete="off">
<button>Send</button>
</form>
</div>
<script>
var socket = io();
socket.on('message', function (data) {
var li = document.createElement('li');
li.innerHTML = data.message;
document.getElementById("messages").appendChild(li);
});
var form = document.getElementById('chatForm');
var message = document.getElementById('m');
var messages = document.getElementById('messages');
form.onsubmit = function() {
socket.emit('send', { username: 'me', message: message.value });
message.value = '';
return false;
};
</script>
</body>
</html>
签到我们的文本区域,还有一个很重要的点,就是md格式的代码块引用需要使用 ``` (也就是键盘的数字1左边那个键)来进行引用,建议注意一下。
3.详细说明
以上两段代码分别对应的是服务端和客户端的代码,实现一个简单的聊天,其实核心内容就是要实现双向socket通信,在这个之前我们可以先了解一下socket。
- 什么是socket
Socket是一种特殊的文件,一个进程可以打开该文件,并和其他进程交换数据,WinSock保留了UNIX中关于socket的概念和函数,实现跨越网络通信,被列入IETF文档(RFC 793)。
简单来说,Socket就是任意两个程序间的通讯渠道。
对于 node.js来说,socket.io是一个非常便捷的开发库,它可在webSocket没有得到广泛支持的时代,提供浏览器和服务器之间实时双向通信的功能。它既可以在客户端也可以在服务器端运行,基于socket.io,可以轻松实现客户端和服务端之间的socket通信。
- socket.io 的流程
使用socket.io实现聊天的最重要的一点是要理解它的通信流程,即如何通过socket.io实现客户端和服务端之间的双向通信。
首先是建立连接
进入一个页面后客户端通过 io()
连接到Websocket服务器上;
创建一个WebSocket连接,这个连接是HTTP的一个握手过程,交由HTTP协议进行,HTTP协议过程中会在客户端和服务端之间进行一次握手过程,从而形成一个持久的连接。
客户端和服务端分别对应处理
每个socket维护了一个客户端(浏览器)和服务器之间的连接
服务端监听所有的socket连接,客户端监听特定的socket连接;
通信只能通过这个socket进行,即初始sessionId已经确定,直接通过sessionId就可以完成消息的推送。
然后就是处理交互
socket.on(): 监听客户端事件
sock.emit(): 触发服务器事件
sock.broadcast.emit(): 广播(除自己以外的客户端都可以收到)。
io.sockets.socket(clientid).emit(): 指定用户发送消息。
io.sockets.emit() : 全局广播,从而实现实时性的聊天通信。
最后就是断开连接
客户端断开连接后,服务器监听到disconnect事件,进行后续的处理。
根据 socket.io api 提供的 socket.disconnect([close]) ,服务端可以关闭当前的 socket 连接。
以上就是socket.io的通信流程和方法,动手实现一下这个小小的聊天室也是很有意思的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js 用socket实现聊天的示例代码 - Python技术站