以下是我所写内容的描述。
ioServer1.js文件创建一个socket.io服务器并打开一个端口以侦听3000.同一个文件还打开一个客户端连接到服务器端口3001(使用socket.io-client)。当通过浏览器访问时,ioSever1.js也提供index.html(使用localhost:3000)。编写index.html,其作为服务器的浏览器客户端。 ioServer1.js使用io.emit向新连接上的所有客户端发送。
ioServer2.js与ioServer1.js相同,不同之处在于它侦听3001并打开与3000的客户端连接。
我在两个不同的git bash终端上运行ioServer1.js和ioServer2.js。以下是发生的事情:
所有客户--->正确接收和记录服务器消息;客户端是基于终端本机还是基于浏览器。
在服务器上--->客户留言。从服务器到客户端的io.emit和socket.emit正由任何浏览器客户端接收,但本机客户端不。因此,运行ioServer1.js(ioServer2的客户端)的终端不会记录来自服务器ioServer2.js的任何消息。
我在ioServer1.js和index.html文件中包含了代码。 ioServer2.js文件仅在它正在侦听的端口(3001)中不同,并使客户端连接到(3000)。感谢任何有关调试的帮助
ioServer1.js:
var port="3000";
var express=require('express');
app=express();
var http=require('http');
var server=http.createServer(app).listen(port);
var io=require("socket.io")(server);
app.use(express.static('./'));
console.log(`io server listening on port ${port}`);
io.on('connection',(socket)=>{
console.log(`Connection by socket with id ${socket.id}`);//This works
socket.emit("message",`socket.emitMsgFromServer3000: You are being Served by port: ${port}`);//Works only for browser clients
io.emit("message",`io.emitMsgOriginSever3000:socket with id ${socket.id} connected`);//Works only for browser clients
socket.on("initialMessageFromClient",(message)=>{
console.log(message);
});
socket.on("message",(message)=>{
console.log(message);
});
});
var socketioClient = require('socket.io-client');// Making a client connection to 3001
ip='http://localhost:3001';
neighborRpi2=socketioClient.connect(ip, {reconnection: true});
的index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Page Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="jquery-3.2.1.min.js" type="text/javascript"></script>
<script src="socket.io-client.min.js"></script> ><!-- this is needed for client to communicate back to server -->
<script>
var socket = io({transports: ['websocket'], upgrade: false}); /*socket.io-client.min.js needed for this */
socket.on('connect',()=>{
/* Emit a message to server with IRQ "initialMessageFromClient" */
socket.emit("initialMessageFromClient","MsgFromClient: Hello");
});
socket.on("message",(message)=>{
printMessage(message);
});
function printMessage(message) {
$("#messages").append($('<li>').text(message)); /* Jquery is being used here to get to id messages in index.html */
}
</script>
</head>
<body>
This is the Client
<!-- Thus div has id messages. Client code in client.js populates this div -->
<div id="messages"> </div>
</body>
</html>
答案 0 :(得分:0)
You need to listen for messages on the CLI client
var port = "3000";
var express = require('express');
app = express();
var http = require('http');
var server = http.createServer(app).listen(port);
var io = require("socket.io")(server);
app.use(express.static('./'));
console.log(`io server listening on port ${port}`);
io.on('connection', (socket) => {
console.log(`Connection by socket with id ${socket.id}`); //This works
socket.emit("message", `socket.emitMsgFromServer3000: You are being Served by port: ${port}`); //Works only for browser clients
io.emit("message", `io.emitMsgOriginSever3000:socket with id ${socket.id} connected`); //Works only for browser clients
socket.on("initialMessageFromClient", (message) => {
console.log(message);
});
});
var socketioClient = require('socket.io-client'); // Making a client connection to 3001
ip = 'http://localhost:3001';
neighborRpi2 = socketioClient.connect(ip, {
reconnection: true
});
neighborRpi2.on('connect', () => {
neighborRpi2.emit("initialMessageFromClient", "MsgFromClient: Hello");
});
neighborRpi2.on("message", (message) => {
console.log("Recieved on CLI client", message);
});