随笔 - 224  文章 - 41  trackbacks - 0
<2013年6月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

享受编程

常用链接

留言簿(11)

随笔分类(159)

随笔档案(224)

文章分类(2)

文章档案(4)

经典c++博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜

用golang 建立起一个http server 非常的简单,只要简单的几行代码:
 
package main
 
import (
    
"net/http"
)
 
func SayHello(w http.ResponseWriter, req 
*http.Request) {
    w.Write([]
byte("Hello"))
}

 
func main() 
{
    http.HandleFunc(
"/hello", SayHello)
    http.ListenAndServe(
":8001", nil)
 
}


使用GoSublime ide

编译 go build httpserver.go
运行 httpserver.exe

用chrome 访问 http://127.0.0.1:8001/hello
可以看到
hello

使用 go语言搭建 websocket 也非常的简单

先安装 websocketbao
go get code.google.com/p/go.net/websocket

编写golang的服务器


package main

import (
    
"code.google.com/p/go.net/websocket"
    
"fmt"
    
"io"
    
"log"
    
"net/http"
)

func ChatWith(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 from " + ws.Request().Host + "  " + reply
        msg := "welcome to websocket do by pp"
        fmt.Println(
"Sending to client: " + msg)

        
if err = websocket.Message.Send(ws, msg); err != nil {
            fmt.Println(
"Can't send")
            
break
        }

    }

}


func Client(w http.ResponseWriter, r 
*http.Request) {
    html :
= `<!doctype html>
<html>
    
    
<script type="text/javascript" src="http://img3.douban.com/js/packed_jquery.min6301986802.js" async="true"></script>
      
<script type="text/javascript">
         var sock 
= null;
         var wsuri 
= "ws://127.0.0.1:8001";

         window.onload 
= function() {

            console.log(
"onload");

            
            
try
            
{
                sock 
= new WebSocket(wsuri);
            }
catch (e) {
                alert(e.Message);
            }

            
            
            

            sock.onopen 
= function() {
               console.log(
"connected to " + wsuri);
            }

            
            sock.onerror 
= function(e) {
               console.log(
" error from connect " + e);
            }

            
            

            sock.onclose 
= function(e) {
               console.log(
"connection closed (" + e.code + ")");
            }


            sock.onmessage 
= function(e) {
               console.log(
"message received: " + e.data);
               
               $(
'#log').append('<p> server say: '+e.data+'<p>');
               $(
'#log').get(0).scrollTop = $('#log').get(0).scrollHeight;
            }

            
         }
;

         function send() 
{
            var msg 
= document.getElementById('message').value;
            $(
'#log').append('<p style="color:red;">I say: '+msg+'<p>');
                $(
'#log').get(0).scrollTop = $('#log').get(0).scrollHeight;
                $(
'#msg').val('');
            sock.send(msg);
         }
;
      
</script>
      
<h1>WebSocket chat with server </h1>
          
<div id="log" style="height: 300px;overflow-y: scroll;border: 1px solid #CCC;">
          
</div>
          
<div>
            
<form>
                
<p>
                    Message: 
<input id="message" type="text" value="Hello, world!"><button onclick="send();">Send Message</button>
                
</p>
            
</form>
            
          
</div>

</html>`
    io.WriteString(w, html)
}


func main() 
{
    
//
    http.Handle("/", websocket.Handler(ChatWith))
    http.HandleFunc(
"/chat", Client)

    fmt.Println(
"listen on port 8001")
    fmt.Println(
"visit http://127.0.0.1:8001/chat with web browser(recommend: chrome)")

    
if err := http.ListenAndServe(":8001", nil); err != nil {
        log.Fatal(
"ListenAndServe:", err)
    }

}


启动服务器:





用chrome 浏览器就可以和服务器交互



这个程序较为简单,以后可以加入服务器智能回答的功能。

参考:
http://www.sharejs.com/codes/go/4374

http://www.xinze.me/%E5%9F%BA%E4%BA%8Egolang%E7%9A%84websocket-server/
posted on 2012-12-14 15:07 漂漂 阅读(15258) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理