![](/img/trans.png)
[英]How to send binary data from a Node.js socket.io server to a browser client?
[英]Unable to send data from one Client to another in socket.io Node.JS
我有两个客户端,可以通过socket.io交换一些数据。 我也有一台服务器。 我需要做的是我想通过套接字将数据从客户端1发送到客户端2,但我无法弄清楚如何实现。请注意,客户端1和客户端2是不同的html页面。
Server.JS
var express = require('express');
var app = express();
var fs = require('fs');
var path = require('path');
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 3000;
var ip=process.env.IP||"192.168.1.5";
app.use(express.static(__dirname));
server.listen(port,ip, function () {
console.log('Server listening at port %d ', port);
});
app.get('/index', function(req, res) {
res.sendFile(path.join(__dirname,'/test.html'));
})
app.get('/index1', function(req, res) {
res.sendFile(path.join(__dirname,'/test1.html'));
})
io.on('connection', function (socket) {
socket.on('broadcast', function (message) {
console.log(message);
socket.broadcast.emit('message', message);
});
console.log("connected");
});
客户端1.JS
<!doctype html>
<html lang="en">
<head>
</head>
<body>
<script src="/socket.io/socket.io.js"></script>
<script >
var socket = io.connect();
socket.emit('broadcast',"Broadcasting Message");
socket.on('message', function (data) {
alert(data)
});
</script>
</body>
Client2.JS
<!doctype html>
<html lang="en">
<head>
</head>
<body>
<script src="/socket.io/socket.io.js"></script>
<script >
var socket = io.connect();
socket.on('message', function (data) {
alert(data)
//socket.emit('message',"Hello world");
});
</script>
</body>
好的,这是我在本地执行的操作,您可以根据需要进行更改。
server.js
var io = require('socket.io')(80);
io.on('connection', function (socket) {
socket.on('broadcast', function (message) {
console.log(message);
socket.broadcast.emit('message', message);
});
console.log("connected");
});
client1.js
var socket = io.connect('ws://127.0.0.1');
socket.emit('broadcast',"Broadcasting Message");
socket.on('message', function (data) {
$('#client1').html(data);
});
client2.js
var socket = io.connect('ws://127.0.0.1');
socket.on('message', function (data) {
$('#client2').html(data);
});
index.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript" src='https://code.jquery.com/jquery-1.12.4.min.js'></script>
<script type="text/javascript" src="/socket.io/socket.io.js"></script>
<script type="text/javascript" src="client1.js"></script>
<script type="text/javascript" src="client2.js"></script>
</head>
<body>
<div> <h1> CLIENT 1 </h1><div id="client1"></div></div>
<div> <h1> CLIENT 2 </h1><div id="client2"></div></div>
</body>
</html>
在运行终端node server.js
并重新加载页面后,您将看到client2将附加Broadcasting message
html。
在客户端实例化WS时,请确保将URL传递给服务器...例如var socket = io.connect('http://localhost');
在服务器端,与每个客户端的每个WS连接都是唯一的实例。 也就是说,为此,您必须仔细考虑在发出事件时要针对的WS连接。
首先要解决的是如何将WS连接实例与特定客户端相关联。 答案是使用map / dictionary / plain ol的javascript对象,将某种独特的客户端标识符作为键,并将WS连接实例作为值。 伪代码:
let connections = { 'client1': WSinstance, 'client2': WSinstance };
每次创建新的WS实例时,都将添加到该对象。 假设您有一种唯一标识客户端的方法,并且该方法存储在变量clientId
,则可以执行以下操作:
io.on('connection', function (socket) {
connections[clientId] = socket;
}
现在,如果您只想向client1发送消息,则可以通过从对象connections.client1
抓取它来使用与其关联的WS实例,或者如果您希望将client2 connections.client2
作为目标
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.