websocket进行解码思路及使用nginx转发

        1、http://XXX.55.253.177:6180/songlan-server/emergency/event/statusList(外网地址)

        ①6180端口在哪儿配置的:
        是用阿里云将内网的XXX.29.126.164的18800端口和外网的XXX.55.253.177得6180端口进行了映射,所以能够访问外网的XXX.55.253.177:6180就跟直接访问内网的XXX.29.126.164:18800一样。

        ②/songlan-server在哪儿配置的及整个项目使用到的所有配置是怎么样的流程:
        /songlan-server在bootstrap-prod.yml(prod环境)的spring.application.name配置的,就会带到路径后缀。

        2、websocket(后缀是 /webSocket/event)

        背景:因为我本地能够连上websocket,但是部署到开发环境不行,所以进行查看。
        方法①:本来项目是把外网XXX.55.253.177:6180映射到内网XXX.29.126.162的80端口,然后内网XXX.29.126.162服务器的nginx网关统一进行代理转发,XXX.29.126.162的nginx监听的是80端口,我的服务是转发到内网XXX.29.126.164的18801端口(这个/bigScreen是前端url),想法是在nginx配置加一个 /webSocket,直接转发给XXX.29.126.164的18800。
 

//xxx.29.126.162
server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        
        location ^~ / {
                proxy_pass http://xxx.29.126.162:1010/;
                proxy_set_header  Host  $host:6180;
                proxy_set_header  X-Real-IP  $remote_addr;
                proxy_set_header  REMOTE-HOST $remote_addr;
                proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        //服务
        location ^~/bigScreen/ {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://xxx.29.126.164:18801;
        }

        ......
        
}

        

        在内网使用websocket在线工具是能够连接XXX.29.126.164:18800/webSocket/event的,但是还是有点问题,暂时无法解决使用。

        websocket使用:开始当新增一个事件时推送给客户端报错,

参考链接:WebSocket使用javax.websocket.RemoteEndpoint.Basic.sendObject(Object arg0)向页面方法发送对象_天南韩立的博客-CSDN博客_sendobject

javax.websocket.EncodeException: No encoder specified for object of class [class org.ywzn.po.Messagepojo]

         然后加了一个解码器,同时在websocket上加上这个解码器,

@ServerEndpoint(value = "/websocket/news", encoders = { ServerEncoder.class })

        就能正常推送了。

package org.ywzn.websocket;
 
import javax.websocket.EncodeException;
import javax.websocket.Encoder;
import javax.websocket.EndpointConfig;
 
import org.ywzn.po.Messagepojo;
import org.ywzn.util.Java2Json;
 
import com.sdicons.json.mapper.MapperException;
 
/**
 * definition for our encoder
 * 
 * @编写人: 夏小雪 日期:2015年6月14日 时间:上午11:58:23
 */
public class ServerEncoder implements Encoder.Text<Messagepojo> {
 
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
 
	}
 
	@Override
	public void init(EndpointConfig arg0) {
		// TODO Auto-generated method stub
 
	}
 
	@Override
	public String encode(Messagepojo messagepojo) throws EncodeException {
		try {
			return Java2Json.JavaToJson(messagepojo, false);
		} catch (MapperException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}
 
}

        方法②:直接在阿里云上配置,将外网XXX.55.253.177:18800端口映射到内网XXX.29.126.164的18800端口,因为我本地的websocket连接地址就是ws://127.0.0.1:18800/eventWebSocket,所以如果映射那就是ws://xxx.55.253.177:18800/eventWebSocket就能直接访问XXX.29.126.164:18800/eventWebSocket,内网能访问,那外网就能访问到了。

        一开始还是不能使用,但是按道理应该可以了,后来往服务器里安全组加了18800这个端口(类似于防火墙开放了这个端口,nginx转发这种是不需要走这个的),然后就可以了!!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值