作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 NodeJS 上使用 socket.io 做一些事情,但我无法弄清楚如何(仅)从 NodeJS 触发套接字。
直到现在,我一直在通过从前端调用它来使用 socket.io,但我想知道是否可以做我在前端所做的相同事情,但这次是在 nodeJS 部分(服务器端)。
我猜这是不可能的,因为需要一种连接(我喜欢称它为 TCP 连接,但我不确定这是否正确)并且如果连接中没有第二个参与者,套接字将不会'行不通。这是我的猜测。
所以我现在正在做的是:
app.js(服务器文件)
...
const ioLib = require('./path/io.js')(io);
...
...
...
路径/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 内部的套接字?
你怎么看?
最佳答案
可以从独立的 Node.js 应用程序(它运行的位置并不重要)而不是通过 Web 浏览器访问的 Web 前端连接 Socket.IO 服务器。为了实现这一点,你应该使用 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!
希望这对您有所帮助!
关于javascript - 有没有办法从 NodeJS 触发 socket.io 连接事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55245706/
我是一名优秀的程序员,十分优秀!