Websocket服务监听收发消息

1.pom依赖坐标

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>

2.项目配置端口和项目包名

application.properties

server.port=8088
//路径规范:为应用的所有servlet提供一个统一的前缀,使URL结构更加清晰和一致
server.servlet.context-path=/rxtxcommon

2.创建处理器

import com.fazecast.jSerialComm.SerialPort;
import com.groupname.rxtxcommon.service.SerialPortService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import java.util.List;
import java.util.Map;


@Component
public class WebSocketHandler extends TextWebSocketHandler {

    private static Logger log = LoggerFactory.getLogger(WebSocketHandler.class);
    //和客户端建立连接
    @Override
    public void afterConnectionEstablished(WebSocketSession session) {
        log.info("和客户端建立连接"+session.getId());
	    //初始建立连接业务逻辑处理
		。。。。。。
		。。。。。。  
    }

    //和客户端断开连接
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        log.info("和客户端断开连接");
       //断开连接业务逻辑处理
		。。。。。。
		。。。。。。
        super.afterConnectionClosed(session, status);	    
    }

    // 获取客户端发来的消息并响应消息
    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        String receObjStr = message.getPayload();
        log.info("sessionID==="+session.getId());
		//接收客户端消息进行业务逻辑处理
		。。。。。。
		。。。。。。        
        // 发送消息给客户端
        session.sendMessage(new TextMessage("字符串"));
    }
	
	//异常处理
	@Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        session.close(CloseStatus.SERVER_ERROR);
        log.error("连接异常", exception);
    }
}

3.注册处理器

@Configuration
@EnableWebSocket
public class WebSocketServerConfigure implements WebSocketConfigurer {

    @Autowired
    private WebSocketHandler webSocketHandler;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
    	//前端用websocket建立连接
        registry.addHandler(webSocketHandler, "/websocket");
            //这是另一种方式,但是前端用SockJS建立连接
//        registry.addHandler(webSocketHandler, "/websocket").withSockJS();
    }
}

4.前端页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>WebSocket客户端</title>
    <script src="https://cdn.bootcss.com/sockjs-client/0.3.4/sockjs.min.js"></script>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<style>
    .jumbotron {
        width: 100%;
    }

    #text {
        height: 3rem;
        font-size: 1rem;
        line-height: 3rem;
        margin: 1rem;
    }

    .btn {
        margin-right: 5px;
    }

    #connect {
        margin-left: 1rem;
    }

    #log {
        margin: 1rem 0 0 1rem;
    }

</style>
<div class="container">
    <div class="row">
        <div class="jumbotron">
            <input type="text" placeholder="请输入你想传输的内容" id="text" class="col-lg-12"/>
            <input type="button" value="连接" class="btn btn-info" id="connect" onclick="connect()"/>
            <input type="button" value="发送" class="btn btn-success" id="sent" disabled="disabled" onclick="sent()"/>
            <input type="button" value="断开" class="btn btn-danger" id="disconnect" disabled="disabled"
                   onclick="disconnect()"/>
            <div id="log">
                <p>聊天记录:</p>
            </div>
            <input type="button" value="" class="btn btn-success" id="openCom" disabled="disabled"
                   onclick="getCommSer()"/>
        </div>
    </div>
</div>
<script type="text/javascript">
    let text = document.querySelector('#text');
    let connectBtn = document.querySelector("#connect");
    let sentBtn = document.querySelector("#sent");
    let disconnectBtn = document.querySelector("#disconnect");
    let logDiv = document.querySelector("#log");
    let ws = null;
    
    function connect(operNum) {
        debugger
        //rxtxcommon是springboot项目的包名
		//application.properties
		//server.port=8088
		//server.servlet.context-path=/rxtxcommon        
		
        ws = new WebSocket("ws://localhost:8088/rxtxcommon/websocket")       
        ws.onopen = function () {
        //如果与后端websocket成功建立连接那么onopen 函数会触发
            setConnected(true);
            log('和服务端连接成功!');
        };
        
        // 监听服务端返回的消息
        ws.onmessage = function(event) {
            console.log("测试接收服务器信息"+event)
            log('收到服务端消息:' + event.data);
        };
    }

    function sent() {
        if (ws != null) {
            ws.send(text.value);
            log('客户端说:' + text.value);
        } else {
            log('请先建立连接!')
        }
    }

    function disconnect() {
        if (ws != null) {
            ws.close();
            ws = null;
        }
        setConnected(false);
    }

    function log(value) {
        let content = document.createElement('p');
        content.innerHTML = value;
        logDiv.appendChild(content);
        text.value = '';
    }

    function setConnected(connected) {
        connectBtn.disabled = connected;
        disconnectBtn.disabled = !connected;
        sentBtn.disabled = !connected;
    }

</script>
</body>
</html>

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: websocket_codetool是一种用于实现websocket服务的编程工具。websocket是一种全双工通信协议,它可以在浏览器和服务器之间进行双向通信,实现实时数据传输和交互。使用websocket_codetool可以方便地编写websocket服务端代码,实现与客户端的数据传输和处理。 websocket_codetool提供了一些基本的功能,在创建websocket服务时可以进行自定义设置。例如,可以指定websocket服务使用的端口号、协议类型和子协议等。同时,websocket_codetool也支持一些事件处理机制,可以在各种事件发生时触发相应的回调函数,例如连接建立事件、数据收发事件等。 使用websocket_codetool实现websocket服务的过程比较简单,只需要引入相应的库文件,并使用提供的API进行代码编写即可。例如,可以通过websocket_codetool提供的on函数来监听客户端的连接请求,并在连接建立时发送欢迎消息。在接收到客户端发送的数据时,可以使用websocket_codetool提供的send函数进行数据处理或者转发。 总之,使用websocket_codetool可以更加方便地编写实时数据交互的应用程序,复杂的网络编程变得简单易懂,提高了开发效率和代码质量。 ### 回答2: WebSocket是一种在Web浏览器和服务器之间进行实时双向通信的协议。WebSocket_codetool是一个用于实现WebSocket服务的软件工具包,它提供了一组用于处理WebSocket通信的接口和类。 使用WebSocket_codetool可以快速搭建一个WebSocket服务器,让客户端和服务器之间实现实时通信,比如基于WebSocket的聊天室、在线游戏、消息推送等应用。 WebSocket_codetool提供的接口包括实现WebSocket握手、连接管理、数据传输等,并且支持多协议,如HTTP、HTTPS、WS、WSS等。其实现基于Java语言和Netty框架,具有高并发、易扩展、高性能等优点。 WebSocket_codetool还支持自定义消息解码和编码方式,并且提供了多种编码格式,如二进制、JSON、文本等。同时,它还具有可靠性,可以自动进行心跳检测和断线重连等功能,确保数据传输的稳定性和可靠性。 WebSocket_codetool是一个非常优秀的WebSocket服务框架,它的出现简化了WebSocket服务的开发难度,让开发者可以更加专注于业务逻辑的实现。 ### 回答3: c语言是一种非常底层、高效的编程语言,常常用于嵌入式系统和网络编程。WebSocket是一种基于TCP协议的双向通信协议,可以在Web浏览器和服务器之间创建实时通信的连接,用于实现在线游戏、聊天室、股票行情等。 websocket_codetool是一种c语言开发的websocket服务库,可以方便地实现websocket服务。它提供了一套完整的API,包括创建websocket服务、处理连接请求、发送和接收消息等。同时,该库还提供了一些示例代码和文档,方便开发者快速上手。 使用websocket_codetool实现websocket服务,需要先安装该库,并按照文档说明进行开发。开发者需要自己编写处理逻辑,比如游戏逻辑、聊天室交互等,并在代码中调用websocket_codetool提供的API进行通信。 websocket_codetool的优势在于它是一种开源、免费的服务库,可以在自由软件协议下进行修改和使用。而且,由于使用了c语言的特性,它的运行效率非常高,可以满足对性能要求非常高的应用场景。最后,它还支持多平台,包括Windows、Linux等操作系统,可以方便地实现跨平台的websocket服务

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值