websocket浅谈

1、怎么搭建一个简易的websocket架子,让前端后端用来交互?

我们采用引入三方jar的方式进行搭建,需要的jar如下:

复制代码
       <dependency>
            <groupId>org.atmosphere</groupId>
            <artifactId>atmosphere-runtime</artifactId>
        </dependency>

        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
        </dependency>

需要再web,xml里面进行配置一个servlet

复制代码
    <servlet>
        <description>AtmosphereServlet</description>
        <servlet-name>AtmosphereServlet</servlet-name>
        <servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
        <init-param>
            <param-name>org.atmosphere.cpr.packages</param-name>
            <param-value>具体的包的目录</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>AtmosphereServlet</servlet-name>
        <url-pattern>/websocket/*</url-pattern>
    </servlet-mapping>

前端需要引入 atmosphere.js

前端可以封装一个简易的调用

复制代码
html:

<input id="send" type="input">
<input type="button" onclick="send()" value="发送">
<span id="sendvalue"></span>




js:

var request={
            url:'http://localhost:8082/工程名称/websocket/test',
            contentType:"application/json",
            transport:"websocket",
            fallbackTransport:"long-polling",
            onTransportFailure: function(errorMsg, request) {
                request.fallbackTransport = "long-polling";
                transport = "long-polling";
            },
            onMessage:function(response) {
                var msgStr = response.responseBody;
                $("#sendvalue").text(msgStr);
                }


        }
        var subSocket=atmosphere.subscribe(request);


        function send(){
            var send=$('#send').val();
            subSocket.push(send);
        }

后端接收代码

复制代码
import lombok.extern.slf4j.Slf4j;
import org.atmosphere.config.service.Disconnect;
import org.atmosphere.config.service.ManagedService;
import org.atmosphere.config.service.Message;
import org.atmosphere.config.service.Ready;
import org.atmosphere.cpr.Broadcaster;

import javax.inject.Inject;
import javax.inject.Named;

@Slf4j
@ManagedService(path = "websocket/test")
public class WebsocketTest {


    @Inject
    @Named("websocket/test")
    private static Broadcaster broadcaster;

    @Ready
    public void onReady() {
        log.info("onReady"); //准备
    }

    @Disconnect
    public void onDisconnect() {
        log.info("onDisconnect"); //销毁
    }

    @Message
    public void onMessage(String message) {
        log.info("onMessage");
        broadcaster.broadcast(message);  //发送给前端
    }
}
相关推荐
新*5 小时前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化
javascript·python·websocket·性能优化·blob·zlib·arraybuffer
️公子13 小时前
可插拔 13 款实时棋牌对战平台实践:房间容器、Plugin SDK 与幂等账本
websocket·typescript·游戏开发·monorepo·插件架构·棋牌平台·实时对战
guizhoumen8 天前
net core下WebSocket请求总是断开的解决方案
网络·websocket·网络协议
QianhangQianping9 天前
WebSocket实时推送+ HTTP 定时轮询:一块大屏两套取数怎么不打架
前端·websocket·网络协议·http·低代码·架构·数据可视化
web打印社区10 天前
Lodop排障总纲-常见报错一张表
开发语言·前端·javascript·chrome·websocket
Da Da 泓11 天前
五子棋 Web 端测试用例报告
前端·网络·websocket·网络协议·测试用例·项目
web打印社区12 天前
Chrome-kiosk-printing能上生产吗
开发语言·前端·javascript·chrome·websocket
XiYang-DING14 天前
【WebSocket】文本帧Text Frame
网络·websocket·网络协议
TickDB14 天前
美股历史数据下载:用 Codex 取数,Python 导出 CSV
python·websocket·mcp·行情数据 api
国际云,接待15 天前
云服务器 WebSocket 空闲后频繁断开:查 Nginx 超时、心跳与负载均衡,再评估扩容
服务器·websocket·nginx