利用Go语言搭建WebSocket服务端方法示例

 更新时间:2017年04月03日 10:42:25   作者:小谈博客  
这篇文章主要给大家介绍了利用Go语言搭建WebSocket服务端方法,文中通过示例代码介绍的非常详细,需要的朋友们可以参考借鉴,下面来一起看看吧。

Go 搭建一个简单 WebSocket 服务端代码例子 test.go, 如下:

package main
 
import (
 "fmt"
 "log"
 "net/http"
 
 "golang.org/x/net/websocket"
)
 
func Echo(ws *websocket.Conn) {
 var err error
 
 for {
 var reply string
 
 if err = websocket.Message.Receive(ws, &reply); err != nil {
 fmt.Println("Can't receive")
 break
 }
 
 fmt.Println("Received back from client: " + reply)
 
 msg := "Received: " + reply
 fmt.Println("Sending to client: " + msg)
 
 if err = websocket.Message.Send(ws, msg); err != nil {
 fmt.Println("Can't send")
 break
 }
 }
}
 
func main() {
 http.Handle("/", websocket.Handler(Echo))
 
 if err := http.ListenAndServe(":1234", nil); err != nil {
 log.Fatal("ListenAndServe:", err)
 }
}

运行服务端:

go run test.go

在 Firefox 或 Chrome 控制台,可以用以下代码发起客户端的 WebSocket 连接:

var wsServer = 'ws://localhost:1234';
var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) {
 console.log("Connected to WebSocket server.");
};
 
websocket.onclose = function (evt) {
 console.log("Disconnected");
};
 
websocket.onmessage = function (evt) {
 console.log('Retrieved data from server: ' + evt.data);
};
 
websocket.onerror = function (evt, e) {
 console.log('Error occured: ' + evt.data);
};

执行以上代码,得到输出日志:Connected to WebSocket server,表示 WebSocket 连接建立成功。

使用如下代码可以发送数据,如:

websocket.send(2323)

并且马上得到服务端返回的内容,这里是原样返回。

服务端日志如下:

这就使用 Go 搭建了一个简单的 WebSocket 服务端。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • golang判断两个事件是否存在冲突的方法示例

    golang判断两个事件是否存在冲突的方法示例

    这篇文章主要为大家详细介绍了golang判断两个事件是否存在冲突的方法示例,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-10-10
  • Go语言通过TCP协议实现聊天室功能

    Go语言通过TCP协议实现聊天室功能

    这篇文章主要为大家详细介绍了Go语言中如何通过TCP协议实现聊天室功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04
  • golang高并发的深入理解

    golang高并发的深入理解

    golang从语言级别上对并发提供了支持,而且在启动并发的方式上直接添加了语言级的关键字。下面这篇文章主要给大家介绍了关于golang高并发的相关资料,需要的朋友可以参考下
    2019-03-03
  • golang中import cycle not allowed解决的一种思路

    golang中import cycle not allowed解决的一种思路

    这篇文章主要给大家介绍了关于golang中import cycle not allowed解决的一种思路,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-08-08
  • GO excelize读取excel进行时间类型转换的示例代码(自动转换)

    GO excelize读取excel进行时间类型转换的示例代码(自动转换)

    我们经常会遇到如何自动识别excel中的时间类型数据并转化成对应的 "Y-m-d H:i:s"类型数据,本文小编给大家介绍了GO excelize读取excel进行时间类型转换的示例代码(自动转换),需要的朋友可以参考下
    2024-10-10
  • go 迭代string数组操作 go for string[]

    go 迭代string数组操作 go for string[]

    这篇文章主要介绍了go 迭代string数组操作 go for string[],具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 聊聊Golang性能分析工具pprof的使用

    聊聊Golang性能分析工具pprof的使用

    对于线上稳定运行的服务来说, 可能会遇到 cpu、mem 利用率升高的问题,那我们就需要使用 pprof 工具来进行性能分析,所以本文就来和大家讲讲pprof的具体使用吧
    2023-05-05
  • 利用golang的字符串解决leetcode翻转字符串里的单词

    利用golang的字符串解决leetcode翻转字符串里的单词

    这篇文章主要介绍了利用golang的字符串解决leetcode翻转字符串里的单词,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 深入分析Golang Server源码实现过程

    深入分析Golang Server源码实现过程

    这篇文章深入介绍了Golang Server源码实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02
  • Go语言实现LRU算法的核心思想和实现过程

    Go语言实现LRU算法的核心思想和实现过程

    这篇文章主要介绍了Go语言实现LRU算法的核心思想和实现过程,LRU算法是一种常用的缓存淘汰策略,它的核心思想是如果一个数据在最近一段时间内没有被访问到,那么在将来它被访问的可能性也很小,因此可以将其淘汰,感兴趣想要详细了解可以参考下文
    2023-05-05

最新评论