【问题标题】:How to connect Java SocketIO to Javascript Server如何将 Java SocketIO 连接到 Javascript 服务器
【发布时间】:2020-12-08 02:52:11
【问题描述】:

我有一个 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,但两者都可以接受

【问题讨论】:

    标签: javascript java socket.io


    【解决方案1】:

    Java SocketIO 客户端更新后,我找到了答案。我犯了一些错误。

    1. 我需要 socket.io 的 npm 包为版本 2。*
      文档指出,对于 Java 客户端的 1.* 版本,SocketIO 服务器的版本必须为 2.*。目前,2.3.0socket.io 的最新 npm 包,因此请安装它而不是版本 3.*
    2. 我假设 Java 客户端属于不同的主机,因为它不是由服务器本身呈现的。例如,这是 SocketIO 官方文档中的代码:
    app.get('/', (req, res) => {
      res.sendFile(__dirname + '/index.html');
    });
    

    在本例中,Javascript 服务器直接渲染 HTML 文件,因此 但是,Java 代码不能由 Javascript 服务器运行。这就是为什么在创建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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-14
      • 1970-01-01
      • 2020-07-06
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 1970-01-01
      相关资源
      最近更新 更多