如何将javasocketio连接到javascript服务器

e4eetjau  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(323)

我有一个javascript服务器 server.js ```
const http = require("http").createServer()
const io = require("socket.io")(http)

io.on("connection", socket => {
console.log("a user connected")
})

http.listen(3000, () => {
console.log("listening on *:3000")
})

和一个java客户端 `SocketIO.java` ```
package chess_client;

import java.net.URISyntaxException;

import io.socket.client.IO;
import io.socket.client.Socket;
import io.socket.emitter.Emitter;

public class SocketIO {
    private static Socket socket;

    public static void main(String[] args) throws URISyntaxException {
        socket = IO.socket("http://localhost:3000");

        socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {

            @Override
            public void call(Object... args) {
                System.out.println("Connected!");
            }

        });

        socket.connect();
    }
}

我一直在搜索javascript服务器和java客户机示例,但是https://github.com/socketio/socket.io-client-java 仅显示没有javascript服务器代码的java客户机示例。当两者结合时,什么都不起作用。当我运行这两个代码时,我在两个终端上都看不到任何东西!!!怎么了???
对于给出的任何答案,请注意,我更喜欢使用typescript而不是javascript,但两者都是可以接受的

u59ebvdq

u59ebvdq1#

在javasocketio客户端更新之后,我找到了答案。我犯了一些错误。
我需要你的npm套餐 socket.io 第二版*
文件上说 1.* 对于java客户机,socketio服务器的版本必须是 2.* . 在这个时候, 2.3.0 是最新的npm软件包 socket.io 因此,请安装该版本而不是 3.* .
我假设java客户机来自不同的主机,因为它不是由服务器本身呈现的。例如,这是官方socketio文档中的代码:

app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index.html');
});

在本例中,javascript服务器直接呈现html文件,因此javascript服务器无法运行java代码。这就是为什么在创建 const io ,我们应该将其更改为:

const io =  require('socket.io')(http, {
    cors: { origin: '*' }
})

这允许任何主机或源站的代码访问socketio服务器。
如果有人需要这个参考,下面是一个我工作的java客户机和javascript服务器的例子 app.js :

const http = require('http').createServer()

const io =  require('socket.io')(http, {
    cors: { origin: '*' }
})

io.on('connection', (socket) => {
    console.log('Connected to client!')

    io.emit('time', Date.now())
})

http.listen(8080, () => console.log('Server running on port 8080'))
``` `App.java` :

package socket_test;

import java.net.URISyntaxException;

import io.socket.client.IO;
import io.socket.client.Socket;
import io.socket.emitter.Emitter;

public class App {
public static void main(String[] args) throws URISyntaxException {
Socket socket = IO.socket("http://localhost:8080");
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {

        @Override
        public void call(Object... args) {
            System.out.println("Connected to server!");
        }

    });
    socket.on("time", new Emitter.Listener() {

        @Override
        public void call(Object... args) {
            System.out.println("Time: " + args[0]);
        }

    });
    socket.connect();
}

}

相关问题