WebSocket简单使用

本文介绍了WebSocket的基础知识,包括客户端的浏览器实现和服务器端的Java处理。通过示例代码展示了如何建立连接、发送与接收消息,并提及了WebSocket的部署方法及发送二进制数据的能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WebSocket

碎语

最近几日对websocket研究了一下,我就介绍一下服务端基于java的websocket的基本用法吧。至于websocket是什么的,基本原理我就不废话了,百度的介绍很详细。

正题

客户端(浏览器)

    var socket = new WebSocket("ws://localhost:8080/websocket");
    socket.onopen = function(){
      	socket.send("i am Tanghulu");
      	console.log("socket is open");
    }
    socket.onmessage = function(msg){
      	console.log(msg.data);
    }
    socket.onerror = function(error){
      console.log(error);
    }

上面是创建websocket的js代码,首先建立一个WebSocket对象,在建立的过程中指定的url是服务端用来处理这个 连接的程序。当该socket顺利打开后会在控制台输出"socket is open"这句话并向服务端发送一句话"i am Tanghulu",并且每当socket收到信息后会把信息输出到控制台,当连接发生异常的时候同样会将错误信息输出到控制台。

服务端

    import javax.websocket.OnError;
    import javax.websocket.OnMessage;
    import javax.websocket.OnOpen;
    import javax.websocket.Session;
    import javax.websocket.server.ServerEndpoint;
    @ServerEndpoint(value="/websocket")
    public class WebSocket{
      	@OnOpen
      	public void onOpen(Session session){
          	System.out.println("socket is open");
      	}
      	@OnMessage
      	public String onMessage(String msg,Session session){
          	System.out.println(msg);
          	return "server is received";
      	}
      	@OnClose
      	public void onClose(){
          	System.out.println("close...");
      	}
      	@OnError
      	public void onError(Throwable error){
          	System.out.println(error.getMessage());
      	}
    }

这段服务端代码,和上面js代码基本差不多,都是在某一事件发生后将信息打印到控制台,服务端程序在收到消息的时候会将消息打印出来,并且返回一个字符串,这个字符串客户端会收到。

需要注意的是类的开始的标注中有个value="/websocket",这个指定了客户端如何定位这个服务端程序。(ws://localhost:8080/websocket),该程序需要websocket-api.jar 这个包,网上有很多资源。

关于部署

只需要将该程序直接放在你的web项目中即可,web容器会自动加载它的。

更多功能

以上介绍的是websocket如何传送字符串信息,websocket当然还可以传送二进制数据流,websocket可以直接send一个js的Blob对象或者是ArrayBuffer对象。当然在服务端接收时代码稍有变化

    @OnMessage
    public String onMessage(InputStream ips,Session session){
      	//to do code ...
    }
    
    //或者下面的方法也可以用来接受二进制信息
    @OnMessage
    public String onBinaryMessage(byte[] byteMessage,Session session){
      	//to do code ...
    }

当发送的是Blob对象的时候服务器会自动调用该方法,当然如果你定义了两个OnMessage事件方法,方法名字要不一样了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值