簡體   English   中英

如何將 Java SocketIO 連接到 Javascript 服務器

[英]How to connect Java SocketIO to Javascript Server

我有一個 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();
    }
}

I've been searching for Javascript Server & Java Client examples but the example on https://github.com/socketio/socket.io-client-java only shows the Java Client example without the Javascript Server code. 當兩者結合時,沒有任何效果。 當我運行這兩個代碼時,我在任何一個終端中都看不到任何東西??? 怎么了???
對於給出的任何答案,請注意我更喜歡使用 Typescript 而不是 Javascript 但兩者都是可以接受的

在更新 Java SocketIO 客戶端后,我找到了答案。 我犯了一些錯誤。

  1. 我需要 npm package 的socket.io是版本 2.*
    文檔指出,對於 Java 客戶端的1.*版本,SocketIO 服務器必須是2.*版本。 此時, 2.3.0是最新的 npm package for socket.io所以安裝它而不是版本3.*
  2. 我假設 Java 客戶端是不同的主機,因為它不是由服務器本身呈現的。 例如,這是 SocketIO 官方文檔上的代碼:
app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index.html');
});

在此示例中,Javascript 服務器直接渲染 HTML 文件,因此 Java 代碼不能由 Z49A2713B6ACAAAD71D2 服務器運行這就是為什么在創建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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM