用spring boot提供websocket后台

栏目: 后端 · 发布时间: 6年前

内容简介:版权声明:本文为博主原屙文章,喜欢你就担走。 https://blog.csdn.net/leftfist/article/details/89158022

版权声明:本文为博主原屙文章,喜欢你就担走。 https://blog.csdn.net/leftfist/article/details/89158022

websocket,提供客户端与服务器之间交流的双工协议(见拙作《WebSocket》),使用spring boot,可以很方便地提供websocket的服务器端。

主要是标上几个注解。

主体代码:mySocket.java

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;

@ServerEndpoint("/ws")
@Component
public class CaptureSocket {
    private final static Logger LOGGER = LoggerFactory.getLogger(CaptureSocket.class);

    private static CopyOnWriteArraySet<CaptureSocket> set = new CopyOnWriteArraySet<>();
    private Session session;

    @OnOpen
    public void onOpen(Session session) throws IOException,InterruptedException {
        this.session=session;
        set.add(this);
        LOGGER.info("新连接来自:" + session.getRequestURI().getHost());
    }

    @OnClose
    public void onClose(){
        set.remove(this);
        LOGGER.info("连接关闭:" + this.session.getRequestURI().getHost());
    }

    @OnMessage
    public void onMessage(String message,Session session){
        LOGGER.info("来自客户端消息:" + message);
    }

    @OnError
    public void onError(Session session,Throwable err){
        LOGGER.info(err.getMessage());
        err.printStackTrace();
    }
}

配置文件:mySocketConfig.java

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

@Configuration
public class CaptureSocketConfig {
    @Bean
    public ServerEndpointExporter serverEndpointExporter(){
        return new ServerEndpointExporter();
    }
}

这个配置文件无须显示调用,系统会自动解释。究其原因,应该是标注“@configuration”起了作用。

此配置文件的作用,从代码来看,是为了配合解释服务器端点用的?,主体代码mySocket.java里有个标注: @ServerEndpoint("/ws")

相应的客户端代码有:

var ws;
function wsconnect() {
	var ws = new WebSocket("ws://192.168.0.98:8085/ws");//最后一个ws应该就是EndPoint

	ws.onopen = function(evt) {
		console.log("Connection open ...");
		ws.send("hello socket!");
	};

	ws.onmessage = function(evt) {
		console.log("receive message: " + evt.data + ":" + (new Date()));
	};

	ws.onclose = function(evt) {
		console.log("Connection closed.Reconnect will be attempted in 1 second.", evt.reason);
		setTimeout(function() {
			ws = wsconnect();
		}, 1000);
	};

	ws.onerror = function(err) {
		console.error('Socket encountered error: ', err.message, 'Closing socket');
		ws.close();
	};

	return ws;
}

$(function(){
	ws = wsconnect();
});

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

解放战争(上)(1945年8月—1948年9月)

解放战争(上)(1945年8月—1948年9月)

王树增 / 人民文学出版社 / 2009-8 / 60.00

《解放战争》为王树增非虚构文学著述中规模最大的作品。武器简陋、兵力不足的军队对抗拥有现代武器装备的兵力庞大的军队,数量不多、面积有限的解放区最终扩展成为九百六十万平方公里的共和国,解放战争在短短四年时间里演绎的是人类历史上的战争传奇。国际风云,政治智慧,时事洞察,军事谋略,军队意志,作战才能,作品具有宏阔的视角和入微的体察,包含着惊心动魄的人生沉浮和变幻莫测的战场胜负,尽展中国历史上规模最大的一场......一起来看看 《解放战争(上)(1945年8月—1948年9月)》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

html转js在线工具
html转js在线工具

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具