使用WebSocket实现简易聊天室

WebSocket是什么?

实现过程 (vue技术实现)

静态:创建两个页面

简单登录页面
这里是简单的聊天室

登录页面
<template>
  <div class="home">
      <p><span>昵称:</span><input v-model="data" type="text"></p>
      <p><span>头像:</span><input v-model="head" type="text"></p>
    <p><button @click="handleLogin">登录</button></p>
  </div>
</template>

<script>
export default {
  data(){
    return {
      data:"",
      head:""
    }
  },
  methods:{
  //点击登录按钮跳转到聊天室
    handleLogin(){
      this.$router.push({
        path:"/about",
        query:{
          data:this.data,
          head:this.head
        }
      })
    }
  }
}
</script>

聊天室页面
实现思路:

1、在created中获取登录页面传过来的数据,在data中定义并赋值。
2、在methods中定义一个函数来连接socket
3、在函数中创建一个WebSocket实例对象,并传入服务器地址
4、通过socket.onopen连接
5、连接成功后利用socket.send发送请求,将定义的用户信息数据发给服务器,注意:发送的消息内容需要用JSON.stringify转化为字符串。
6、再通过socket.onmessage去接收服务器返回的消息,将消息再通过JSON.parse处理后,根据类型来判断如何渲染

<template>
  <div class="chat-wrap">
    <div>在线人数:{{num}}</div>
    <div class="item-wrap" v-for="(item,index) in chatList" :key="index" >
      <img class="chat-img" :src="item.head" alt="" >
      <div class="item-desc">
        <span class="chat-name">{{item.userName}}</span>
        <p class="chat-msg">{{item.data}}</p>
      </div>
    </div>
    <div class="chat-send">
      <input type="text" v-model="msg">
      <button @click="sendMsg">发送</button>
    </div>
  </div>
</template>
<script>
export default {
  data(){
    return{
      userInfo:{
        type:"name",
        data:"",
        head:""
      },
      socket:null,
      msg:"",
      num:"",
      chatList:[],
    }
  },
  created(){
    //获取登录页面传过来的数据
    let {data,head}=this.$route.query;
    this.userInfo.data = data;
    this.userInfo.head  =head;
    this.creatSocket();
  },
  methods:{
    //连接socket
    creatSocket(){
      // 创建WebSocket实例对象
      this.socket = new WebSocket('ws://129.211.169.131:10009/globalchat');
      //连接成功的回调
      this.socket.onopen = () =>{
        console.log("连接成功");
        //连接成功后发送请求,需要用JSON.stringify转化为字符串
        this.socket.send(JSON.stringify(this.userInfo))
      };
      //连接错误
      this.socket.onerror = ()=>{
        console.log("连接错误");
      };
      //接收消息的回调
  this.socket.onmessage = this.serverToMine;
    },
    serverToMine(res){
      console.log(res);
      let data = JSON.parse(res.data);
      //判断type类型来进行渲染
      if(data.type == "message"){
      //将所有的消息存放到chatList数组中
          this.chatList.push({
            head:data.head,
            userName:data.userName,
            data:data.data
          });
      }else if(data.type == "count"){
        this.num = data.data
      }
      console.log("服务器发给我",res);
    },
    sendMsg(){
      let sendID = {
        type:"message",
        data:this.msg,
      };
      this.socket.send(JSON.stringify(sendID))
    }
  }
}
</script>
<style lang="less" scoped>
.chat-wrap{
  padding: 20px;
  background-color: #eee;
  height: 100%;
  .item-wrap{
    display: flex;
    .chat-img{
      width: 50px;
      height: 50px;
      border-radius: 50%;
      margin-right: 10px;
    }
    .item-desc{
      display: flex;
      flex-direction: column;
      
      .chat-msg{
        background-color: white;
        border-radius: 20px;
        padding: 10px 15px;
      }
    }
  }
  .chat-send{
    background-color: #eee;
    padding: 10px 0;
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
  }
}
</style>

最终实现效果

最终实现效果

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java WebSocket是一种用于实现双向通信的网络协议,可以帮助我们实现简易聊天室。下面是一个基于Java WebSocket实现简易聊天室的示例代码: 首先,我们需要定义一个WebSocket处理程序: ```java @ServerEndpoint("/chat") public class ChatEndpoint { private static Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>()); @OnOpen public void onOpen(Session session) { sessions.add(session); } @OnMessage public void onMessage(String message, Session session) throws IOException { for (Session s : sessions) { // 过滤自己 if (!s.equals(session)) { s.getBasicRemote().sendText(message); } } } @OnClose public void onClose(Session session) { sessions.remove(session); } } ``` 在这个处理程序中,我们使用`@ServerEndpoint("/chat")`注解指定了WebSocket的端点,即`/chat`。在`onOpen`方法中,我们将新的会话添加到会话集合中。在`onMessage`方法中,我们将接收到的消息广播给所有其他会话。在`onClose`方法中,我们将关闭的会话从会话集合中移除。 接下来,我们需要在`web.xml`文件中配置WebSocket: ```xml <web-app> <display-name>WebSocket Chat</display-name> <servlet> <servlet-name>chat</servlet-name> <servlet-class>org.glassfish.tyrus.servlet.TyrusServlet</servlet-class> <init-param> <param-name>org.glassfish.tyrus.servlet.websocketClassnames</param-name> <param-value>com.example.ChatEndpoint</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>chat</servlet-name> <url-pattern>/chat/*</url-pattern> </servlet-mapping> </web-app> ``` 在这个配置中,我们使用了`org.glassfish.tyrus.servlet.TyrusServlet`作为WebSocket的Servlet。我们将`com.example.ChatEndpoint`指定为WebSocket处理程序的类名,并将其加载到`servlet`中。 现在,我们就可以在HTML页面中使用WebSocket来连接我们的聊天室了: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>WebSocket Chat</title> </head> <body> <input type="text" id="message"> <button onclick="send()">Send</button> <div id="output"></div> <script> var socket = new WebSocket('ws://localhost:8080/chat'); socket.onmessage = function (event) { var output = document.getElementById('output'); output.innerHTML += event.data + '<br>'; }; function send() { var message = document.getElementById('message').value; socket.send(message); } </script> </body> </html> ``` 在这个HTML页面中,我们创建了一个WebSocket连接到`ws://localhost:8080/chat`。当收到消息时,我们将其添加到页面上的`<div>`元素中。当点击发送按钮时,我们将输入框中的文本发送到WebSocket连接中。 这样,我们就完成了一个简易的Java WebSocket聊天室实现

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值