首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置netty-SocketIO服务器,以便所有远程java客户端都可以访问它

如何配置netty-SocketIO服务器,以便所有远程java客户端都可以访问它
EN

Stack Overflow用户
提问于 2020-08-07 01:06:40
回答 1查看 1.3K关注 0票数 0

我正在开发一个Spring项目,其中还包括一个基于netty的socketIO服务器。因此,两个客户端: web客户端和android客户端!他们都在当地工作得很好!但是,当我将在线服务器部署在J弹性中时,只有访问netty-SocketIO服务器的web客户机,但android客户端无法连接到netty-SocketIO服务器。有人可以帮助我将netty-socketIO服务器配置为接受来自端口8888上任何地址的所有请求。

服务器配置

代码语言:javascript
复制
Configuration config = new Configuration();

        //config.setHostname("sec.j.layershift.co.uk");
        config.setHostname("0.0.0.0");
        config.setPort(8888);


        final SocketIOServer server = new SocketIOServer(config);


        // Listen for client connections
        server.addConnectListener(client -> {
            System.out.println("************ Client: " + getIpByClient(client) + " Connected ************");


        });

Web客户端配置

代码语言:javascript
复制
@CrossOrigin("*")
@RestController
public class ClientLocation {

    Socket socket =null;
    EventBuilder eventBuilder =null;
    Gson gs =  new Gson();
    //................................


socket = IO.socket("http://sec.j.layershift.co.uk:8888");
            socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {

                @Override
                public void call(Object... args) {

                    ChatObject co = new ChatObject("ADMIN", "");
                    String infUser = gs.toJson(co);
                    System.out.println("\n"+infUser);
                    JSONObject jb =  new JSONObject();
                    try {

//                      jb.put("userName", co.getUserName());
//                      jb.put("message", co.getMessage());

                        jb =  new JSONObject(infUser);
                        socket.emit("username", jb);
                    } catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

java或android客户机的配置

代码语言:javascript
复制
private void clientIO(){

        try {
            socket = IO.socket("http://aug-sec.j.layershift.co.uk:8888");
            socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {

注:java或android的配置与web的配置相同,因为它们都使用Socket.IO v1.0.0。但是只有web客户端才能从J弹性主机中工作,因为它与服务器在同一个文件夹中,而java客户端没有成功,所以一切都在本地主机或局域网中工作。

EN

回答 1

Stack Overflow用户

发布于 2020-08-11 12:45:48

有两种可能的解决方案

  1. 您可以使用公共IP (@Ruslan建议的方式)
  2. ,J弹性平台解析器也支持WebSocket代理(如果存在“升级: websocket”报头)。您可以使用JELASTIC_EXPOSE变量将请求从端口80转发到容器内的8888 (更多信息在https://docs.jelastic.com/container-ports/#ports-auto-redirect中),然后通过环境域和端口80

访问应用程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63293815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档