我正在尝试在NodeJS上使用socket.io进行某些操作,但我不知道如何(仅)从NodeJS触发套接字。
到目前为止,我是通过从前端调用socket.io来使用它的,但我想知道是否有可能做与前端相同的操作,但是这次是在nodeJS部分(服务器端)进行的。
我的猜测是不可能的,因为需要一种连接(我喜欢称其为TCP连接,但是我不确定那是真的还是不正确的),并且在连接中没有第二个参与者,套接字将不会出现。没事。那是我的猜测。
所以我现在正在做的是:
app.js(服务器文件)
...
const ioLib = require('./path/io.js')(io);
...
...
...
path / io.js(套接字文件)
module.exports = function(io){
io.on('connection', async function(socket) {
console.log('socket talks : a user connected');
...
...
});
module.exports.io = io;
}
然后从file.ejs文件执行:
var socket = io("url");
因此,我们将其称为架构,我将执行以下操作:
当我访问该网页时,套接字中会触发“连接”事件。 我的问题是,我正在尝试尽可能简单地表述它: 没有网页怎么办?是否可以触发NodeJS内的套接字?
你怎么看?
答案 0 :(得分:0)
可以通过独立的Node.js应用程序连接Socket.IO服务器(在运行位置并不重要),而不是通过Web浏览器访问的Web前端。为了实现这一点,您应该使用socket.io-client
。客户端用法示例如下:
// Node.js app: client.js
const io = require('socket.io-client');
const socket = io.connect('http://SERVER_IP:SERVER_PORT', {
reconnect: true
});
socket.on('connect', function (socket) {
console.log('Connected to the server!');
});
socket.emit('connected', 'Hi from the client side!');
在这种情况下,您的服务器端应用程序应包括以下内容:
// Node.js app: server.js
io.on('connection', function(socket) {
console.log('socket talks: a user connected');
// Print the message that comes from the socket client
socket.on('connected', function (msg) {
console.log(msg);
});
});
从上面可以看到,从根本上说,该体系结构与服务器-客户端相同。现在,让我们更进一步,将所有这些代码放在一个js文件中,看看它是如何工作的:
// server/client together: crazy-socketapp.js
const io_server = require('socket.io').listen(3030);
io_server.sockets.on('connection', function (socket) {
console.log('A client is connected!');
socket.on('connected', function (msg) {
console.log(msg);
});
});
const io_client = require('socket.io-client');
const socket = io_client.connect('http://localhost:3030', {
reconnect: true
});
socket.on('connect', function (socket) {
console.log('Connected to the server!');
});
socket.emit('connected', 'Hi from the client side! ');
应用程序的输出:
> A client is connected! > Connected to the server! > Hi from the client side!
希望这会有所帮助!