nodejs系列(10)实现socket通信

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zeping891103/article/details/79287969

Socket主要作用是实现客户端与服务端的实时通信保持通话,它不像ajax请求,每次对话完成后都会把连接断开。Socket通信在Node.js中实现其实很简单,没有想象中复杂,基本上只要懂得监听(.on)和推送(.emit)消息,即能实现Socket通信。


Socket服务端

在服务端使用Socket,需先引入socket.io模块,该模块详细文档可参考https://socket.io/:

cnpm install socket.io

服务端实例代码如下:

var server = app.listen(8081, "127.0.0.1", function() {
	var host = server.address().address;
	var port = server.address().port;
});

/********************socketIO********************/
var io = require('socket.io').listen(server);
// 建立连接
io.sockets.on('connection', function(socket) { //此处每个回调socket就是一个独立的客户端,通常会用一个公共列表数组统一管理
	// 连接断开,如关闭页面时触发
	socket.on('disconnect', function() {
		console.log('已断开链接');
	});
	// 监听客户端发送的消息
	socket.on('clientmessage', function(data) {
		//推送给除自己外其他所有用户的消息,类似于广播
		socket.broadcast.emit('message', {
			text: '你的朋友上线了'
		});
	});
	//发送给自己的消息
	socket.emit('message', {
		text: '你上线了'
	});
});

上例中实现了4步:

1. 建立连接并添加断开连接监听。

2. 建立clientmessage监听,当客户端发来该名称的事件时,服务器向除自己外其他的用户广播事件名称为message的消息。

3.在刚建立连接时,向客户端推送事件名称为message的消息。

其中主要应用到的函数有5个:

.on('connection', function(socket){ }):与客户端建立连接时监听。

.on('disconnect', function(){ }):与客户端断开连接时监听。

.on('event-name', function(data) { }):监听客户端发来的消息。

.broadcast.emit('event-name', { }):向除自己外的所有其他用户广播消息。

.emit('event-name', { }):仅向当前连接的客户端(自己)推送消息。

(注)相关客户端的接口关联请往下看客户端的例子。


Socket客户端

需先去下载socket.io.js文件,下载地址为:https://github.com/socketio/socket.io-client

客户端实例代码如下:

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>socketio测试</title>
		<script>
			var tmp_html = '<link rel="stylesheet" href="../js/libs/bootstrap/3.3.7/css/bootstrap.css"/>';
			tmp_html += '<script src="../js/libs/jquery/3.2.1/jquery.js"><\/script>';
			tmp_html += '<script src="../js/libs/bootstrap/3.3.7/bootstrap.js"><\/script>';
			tmp_html += '<script src="../js/libs/socketio/socket.io.js"><\/script>';
			document.write(tmp_html);
			document.close();
		</script>
	</head>

	<body>
		<button id="btn">发送消息</button>
	</body>
	<script>
		var socket = io.connect('http://127.0.0.1:8081');
		socket.on('message', function(data) {
			console.log(data.text);
		})

		$("#btn").click(function() {
			socket.emit('clientmessage', {
				text: "hello"
			});
		});
	</script>

</html>

客户端主要应用到的函数有2个:

.on('event-name', function(data) { }):监听服务端发来的消息。

.emit('event-name', { }):向服务端推送消息。


Socket即时通信就是那么简单,而且在连接断开时还会自动重连。还有一种实现方法就是使用net模块的套接字,可以直接查看Node.js文档。

猜你喜欢

转载自blog.csdn.net/zeping891103/article/details/79287969