go语言聊天室实现(六)创建HTTP连接,并升级为长连接

Python010

go语言聊天室实现(六)创建HTTP连接,并升级为长连接,第1张

我们在mian函数中,首先初始化配置文件,然后新建http连接。

这个连接创建之后,监听服务器的9999端口。如果url的路径后缀为 "/ws",就转发到ws/ws.go中的IndexHandler方法中。

这个方法中首先我们创建一个websocket的Upgrader实例,然后我们使用Upgrader的upgrade方法来升级一下我们的连接为长连接。

升级完成之后会返回一个*websocket.Conn的连接,我们之后所有的关于连接的操作,都是基于该conn的。

在该连接完成之后,我们将连接存放到一个名为Client的map中,以便之后管理更为方便。

之后,我们启动一个goroutine来读取连接中发送的信息内容,再根据内容进行相应的操作。

大多数现代Web组件栈允许通过栈式/组件式中间件“过滤”请求,这样就能干净地从web应用中分离出横切关注点(译注:面向方面程序设计中的概念?)。 本周我尝试在Go语言的 http.FileServer 中植入钩子,发现实现起来十分简便,让我非常惊讶。

让我们从一个基本的文件服务器开始说起:

func main() {

http.ListenAndServe(":8080", http.FileServer(http.Dir("/tmp")))

}

这里我介绍两种方法!

一  :用IIS或者Apache之类的web服务器软件实现http文件共享

     这里我以IIS为例介绍下用常用的web服务器实现文件共享的方法,具体如下(以我机器为例):

      1、打开IIS,打开“网站 -->默认网站”,右键点击“属性”,点击“主目录”,勾选“目录浏览”选项,如下图所示:

      

    2、进入文件夹C:\Inetpub\wwwroot,拷贝文件“1.7z“到这个目录:

       

    3、打开浏览器,输入本机ip(比如我的:192.168.1.123),即可看到共享的文件并可以下载:

       

       点击“1.7z”即可下载。

二  :用python或者go语言实现http文件共享

1、python实现http文件共享:

      用过python的都知道python有一个很牛x的命令:

   python -m SimpleHTTPServer

    在C:\Python27下运行命令:

    

     打开浏览器,可以看到如下效果:

   

     这个命令的默认端口是8000,如果我再加一个端口参数,可以用其它端口进行访问,命令如下:

   

    打开浏览器:

   

        知道了这个原理,可以写个bat文件,在需要的时候copy到相应的目录双击即可,比如我的httpShare.bat文件如下:

           python -m SimpleHTTPServer 80

           默认用80端口,访问时候只需要输入我的ip地址即可。

2、go语言实现http文件共享:

上面的方法很方便,windows和linux通吃,不过前提是要安装python

这里我有个用go语言实现的,也是windows和linux通吃(windows下不知道怎么配置的可以参考我之前的文章:http://www.2cto.com/kf/201203/122327.html,类似C/C++,是代码可移植,使用前你只需编译一次。

下面是示例代码(httpShare.go):

package main

import (

    "http"

    "fmt"

)

func main(){

    h := http.FileServer(http.Dir("."))

    var port string

    fmt.Printf("Please input port Number: ")

    fmt.Scanf("%s",&port)

    http.ListenAndServe(":"+port, h)   

}

运行效果: