websocket浅谈

IT疑难杂症诊疗室 10w+人浏览 672人参与

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);  //发送给前端
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代衡_Monster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值