关于websocket编程的问题

菜鸡入门websocket,一天了都没摸到门道,要解决的问题是这样的,一个页面有个按钮,点击后给客户端传送一个开始的消息,客户端运行完成后会传送消息给服务器端,服务器端进行接收,有木有老哥指导一下呀

请参考
https://blog.csdn.net/qq_34309305/article/details/76892297

https://img.mukewang.com/down/5a6e804c0001970d00000000.zip
直接下载

https://www.imooc.com/learn/941
也可以看这个视频深度学习一下,慕课网上免费的。netty-socket进阶教程

使用spring-websocket,和h5的websocket.
1.h5的socket中使用制定的api,引入js--->
var ws;
function initWebSocket(){
ws = new WebSocket("ws://localhost/websocket/ws");

  ws.onopen = function(){
    var TheAlreadySendMessage= $('.text').text();
    $('.text').text(TheAlreadySendMessage + "连接已建立!");
  };

  ws.onmessage = function (evt){ 
     var received_msg = evt.data;
     var TheAlreadySendMessage= $('.text').text();
     $('.text').text(TheAlreadySendMessage + received_msg);
  };

  ws.onclose = function(event) {
      console.log("Web Socket closed." + new Date().getTime());
  };

  ws.onerror = function(event) {
      console.log("Web Socket error.");
  }; 

}

2.spring-websocket
@Component("webSocketConfig")
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer{
@Autowired
private ChatWebSocketHandler webSocketHandler;

@Autowired
private CharHandshakeInterceptor charHandshakeInterceptor;


@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
    registry.addHandler(webSocketHandler, "/ws").addInterceptors(charHandshakeInterceptor);
    registry.addHandler(webSocketHandler, "/ws/socketjs").addInterceptors(charHandshakeInterceptor);
}

}

@Component("chatWebSocketHandler")
public class ChatWebSocketHandler implements WebSocketHandler{

private static Map<User,WebSocketSession> ONLINE_CHAT_USER = new ConcurrentHashMap<User,WebSocketSession>();

private static Map<Service,WebSocketSession> ONLINE_CHAT_SERVICE = new ConcurrentHashMap<Service,WebSocketSession>();

private volatile static  int ONLIE_USER_COUNT = 0;

private volatile static  int ONLIE_SERVICE_COUNT = 0;

@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
    User user = (User) session.getAttributes().get("user");
    ONLINE_CHAT_USER.put(user, session);
    ++ONLIE_USER_COUNT;
    Message msg = new Message();
    msg.setText("��������������ӳɹ�!");
    msg.setDate(new Date());
    Gson gson = new Gson();
    TextMessage message = new TextMessage(gson.toJson(msg));
    sendMessageToUser(session,message);
}

@Override
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
    if(message.getPayloadLength() == 0) {
        return;
    }
    System.out.println("��õ�message��------>"+message.getPayload().toString().trim());
    Message msg = new Message();
    msg.setDate(new Date());
    String text = "��������������Ϣ~~~~~~~~~~~~~~~~~~~~~~";
    String htmlEscapeText = HtmlUtils.htmlEscape(text);
    msg.setText(htmlEscapeText);
    this.sendMessageToUser(session,new TextMessage(new Gson().toJson(msg)));
}

@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
    System.out.println("WebSocket�쳣�Ͽ�:"+session.getId()+"�Ѿ��ر�");
    Message msg = new Message();
    msg.setDate(new Date());
    TextMessage message = new TextMessage(new Gson().toJson(msg));
    this.sendMessageToUser(session,message);
    if(session.isOpen()){
        session.close();
    }
    User loginUser = (User) session.getAttributes().get("loginUser");

}

@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
    System.out.println(System.currentTimeMillis());
    System.out.println("WebSocket�رնϿ�:"+session.getId()+"�Ѿ��ر�");
    Message msg = new Message();
    msg.setDate(new Date());
    msg.setText("���ӶϿ�!");
    TextMessage message = new TextMessage(new Gson().toJson(msg));
    this.sendMessageToUser(session,message);    
    if(session.isOpen()){
        session.close();
    }
    User loginUser = (User) session.getAttributes().get("loginUser");
}

@Override
public boolean supportsPartialMessages() {
    return false;
}

public void sendMessageToUser(WebSocketSession session, TextMessage message) throws IOException {
    session.sendMessage(message);
}

}

@Component("charHandshakeInterceptor")
public class CharHandshakeInterceptor implements HandshakeInterceptor{

@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
        Map<String, Object> attributes) throws Exception {
    return true;
}

@Override
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
        Exception exception) {
}

}

这都是核心的,我也在弄这个,刚弄到这一步

你这个问题太宽泛了,建议还是问具体的问题比较好,有利于你的成长。

关于你这个问题,提供思路如下:
“一个页面有个按钮,点击后给客户端传送一个开始的消息,客户端运行完成后会传送消息给服务器端,服务器端进行接收”
你这句话涉及三方:
1、独立页面(特殊的那个客户端),用于启动整个流程,这里要做的就是,连接websocket服务器,点击按钮的操作,是发送消息给服务端ws.send(“hello”);
2、服务端:接收到开始命令后,转发给所有的客户端(那个特殊的客户端监听到这个消息可以不做处理)
3、其他客户端:监听到消息后ws.onmessage = function(evt) { "处理要做的事,做完之后,调用send方法给" };

代码上可以参考下这个:https://www.cnblogs.com/magicsoar/p/3615080.html

另外如果需要像在线聊天程序一样,区分下客户端,也可以在连接请求上加参数,比如用户id,就可以了

先了解下
https://www.cnblogs.com/fuqiang88/p/5956363.html