Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
K
koko
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
koko
Commits
8de3803d
Commit
8de3803d
authored
May 29, 2019
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Update] 修复websocket写非常慢的问题
parent
dcfc1d79
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
59 additions
and
247 deletions
+59
-247
Gopkg.lock
Gopkg.lock
+18
-79
Gopkg.toml
Gopkg.toml
+10
-4
ws.go
cmd/ws.go
+0
-44
handler.go
pkg/httpd/handler.go
+9
-4
server.go
pkg/httpd/server.go
+22
-12
test.go
pkg/httpd/test.go
+0
-34
wscontext.go
pkg/httpd/wscontext.go
+0
-70
No files found.
Gopkg.lock
View file @
8de3803d
...
...
@@ -18,12 +18,12 @@
version = "v0.6.0"
[[projects]]
digest = "1:
c5c73365822fb6a7bbe288316868057ae58447ddd95ecef466b6dbe93c37670e
"
digest = "1:
918521e77b229a961b2011082ee9c026d5077cab825be142f6e9771b61d03238
"
name = "github.com/aliyun/aliyun-oss-go-sdk"
packages = ["oss"]
pruneopts = "UT"
revision = "
08079eb9f6aaa13ee00b8fade6ceeffa138bf877
"
version = "v1.9.
6
"
revision = "
a1626a17f725e3ccd04153bfa560eef306c79493
"
version = "v1.9.
8
"
[[projects]]
branch = "master"
...
...
@@ -34,7 +34,7 @@
revision = "648efa622239a2f6ff949fed78ee37b48d499ba4"
[[projects]]
digest = "1:
495d57b9444476dbdcad8420c73a84b5b72e7e058b011b17e218e759c16f66fd
"
digest = "1:
9cc80abecc469330afaa9cc72744b258419f5be8adc78b7898ada5d299152048
"
name = "github.com/aws/aws-sdk-go"
packages = [
"aws",
...
...
@@ -64,6 +64,7 @@
"private/protocol",
"private/protocol/eventstream",
"private/protocol/eventstream/eventstreamapi",
"private/protocol/json/jsonutil",
"private/protocol/query",
"private/protocol/query/queryutil",
"private/protocol/rest",
...
...
@@ -75,8 +76,8 @@
"service/sts",
]
pruneopts = "UT"
revision = "
0db84dcbcc56669065730700b054eb6d1438a0f7
"
version = "v1.19.3
3
"
revision = "
d6c5ccab427af7408a67e0f45c6e6a3d515fdaee
"
version = "v1.19.3
9
"
[[projects]]
digest = "1:2af3a6e1f12e54cef95c6051cd1cb1e154629a4b82c692ac8a92f00259f570eb"
...
...
@@ -100,7 +101,8 @@
source = "github.com/ibuler/ssh"
[[projects]]
digest = "1:6b7e9b1e2f944a0c84f29943f705954d2d8cfbf6477c37a10d0c80acdbc2445f"
branch = "master"
digest = "1:ef78b8ca7a1b7af78d1ad1594da67b4b4c9f92f397cabe49d3fd97f18211aa32"
name = "github.com/googollee/go-engine.io"
packages = [
".",
...
...
@@ -112,8 +114,8 @@
"transport/websocket",
]
pruneopts = "UT"
revision = "
cc5b8c07e074e97f6bc6f4c6dbc03cf06267e6e0
"
version = "v1.4.1
"
revision = "
7786d3a289b9a76ecdf1df24cbac13102cac1423
"
source = "github.com/ibuler/go-engine.io
"
[[projects]]
digest = "1:25fa43cb2f30c0ab54aaabf05167c56c7e385635b3651015c5726ecb737a905e"
...
...
@@ -124,6 +126,7 @@
]
pruneopts = "UT"
revision = "96da97a7c8f269421388fbb0dca12aa3c0699088"
source = "github.com/googollee/go-socket.io"
version = "v1.4.1"
[[projects]]
...
...
@@ -184,22 +187,6 @@
revision = "477ce49ddf8f201350f40fdb5ed80a65d155cc33"
version = "v1.4.0"
[[projects]]
digest = "1:7c084e0e780596dd2a7e20d25803909a9a43689c153de953520dfbc0b0e51166"
name = "github.com/mattn/go-colorable"
packages = ["."]
pruneopts = "UT"
revision = "8029fb3788e5a4a9c00e415f586a6d033f5d38b3"
version = "v0.1.2"
[[projects]]
digest = "1:9b90c7639a41697f3d4ad12d7d67dfacc9a7a4a6e0bbfae4fc72d0da57c28871"
name = "github.com/mattn/go-isatty"
packages = ["."]
pruneopts = "UT"
revision = "1311e847b0cb909da63b5fecfb5370aa66236465"
version = "v0.0.8"
[[projects]]
digest = "1:0356f3312c9bd1cbeda81505b7fd437501d8e778ab66998ef69f00d7f9b3a0d7"
name = "github.com/mattn/go-runewidth"
...
...
@@ -208,30 +195,6 @@
revision = "3ee7d812e62a0804a7d0a324e0249ca2db3476d3"
version = "v0.0.4"
[[projects]]
branch = "master"
digest = "1:2b32af4d2a529083275afc192d1067d8126b578c7a9613b26600e4df9c735155"
name = "github.com/mgutz/ansi"
packages = ["."]
pruneopts = "UT"
revision = "9520e82c474b0a04dd04f8a40959027271bab992"
[[projects]]
branch = "master"
digest = "1:750abb588d8be68b8ad7e65e350fe2e79a060490ee2d24d437ed1a9f593d0dac"
name = "github.com/mlsquires/socketio"
packages = [
".",
"engineio",
"engineio/message",
"engineio/parser",
"engineio/polling",
"engineio/transport",
"engineio/websocket",
]
pruneopts = "UT"
revision = "169a6f09e62468882b9903aad586d2e1632d2f1c"
[[projects]]
digest = "1:abcdbf03ca6ca13d3697e2186edc1f33863bbdac2b3a44dfa39015e8903f7409"
name = "github.com/olekukonko/tablewriter"
...
...
@@ -256,30 +219,6 @@
revision = "a713b07e6d90e1831d7fefcb69f1310edb3783ae"
version = "v1.10.0"
[[projects]]
digest = "1:7a40ca559b74a39cb374acf9b2405bfbc1421c32c5d14843d97d3119714196b2"
name = "github.com/pschlump/MiscLib"
packages = ["."]
pruneopts = "UT"
revision = "a39843c365f40b726e9f30f3d3e8159a361fe1fe"
version = "v1.0.0"
[[projects]]
digest = "1:74d7514f388723351b912975867519e6b368278d2c6e670aeb78d041b2215e71"
name = "github.com/pschlump/godebug"
packages = ["."]
pruneopts = "UT"
revision = "8c05f846059acd0b0ac57dc3eaa7db4c3f4dd61e"
version = "v0.9.1"
[[projects]]
digest = "1:7e9ddd0dfe0afb9919d3470762b7e488a174206648a0c2412dfb1e6d63073392"
name = "github.com/pschlump/json"
packages = ["."]
pruneopts = "UT"
revision = "0d2e6a308e08fb871c1bcd9b56fb21a1be305e22"
version = "v1.12.0"
[[projects]]
digest = "1:274f67cb6fed9588ea2521ecdac05a6d62a8c51c074c1fccc6a49a40ba80e925"
name = "github.com/satori/go.uuid"
...
...
@@ -289,12 +228,12 @@
version = "v1.2.0"
[[projects]]
digest = "1:
fd61cf4ae1953d55df708acb6b91492d538f49c305b364a014049914495db42
6"
digest = "1:
04457f9f6f3ffc5fea48e71d62f2ca256637dee0a04d710288e27e05c8b4197
6"
name = "github.com/sirupsen/logrus"
packages = ["."]
pruneopts = "UT"
revision = "8
bdbc7bcc01dcbb8ec23dc8a28e332258d25251f
"
version = "v1.4.
1
"
revision = "8
39c75faf7f98a33d445d181f3018b5c3409a45e
"
version = "v1.4.
2
"
[[projects]]
branch = "master"
...
...
@@ -323,14 +262,14 @@
[[projects]]
branch = "master"
digest = "1:0
0a3a12527dd7a3af0d24260fd14887ebd69aaf924303b6a4a67f35eb9b6c012
"
digest = "1:0
79999f5a3a0db923759948975e14ec0cee7195b9d99c566139307d971e7fc3c
"
name = "golang.org/x/sys"
packages = [
"cpu",
"unix",
]
pruneopts = "UT"
revision = "
3a4b5fb9f71f5874b2374ae059bc0e0bcb52e145
"
revision = "
854af27f14a7156d646cb0812811bbc293b2d6a7
"
[[projects]]
branch = "master"
...
...
@@ -368,11 +307,11 @@
"github.com/aws/aws-sdk-go/service/s3/s3manager",
"github.com/elastic/go-elasticsearch",
"github.com/gliderlabs/ssh",
"github.com/googollee/go-engine.io",
"github.com/googollee/go-socket.io",
"github.com/jarcoal/httpmock",
"github.com/kr/pty",
"github.com/leonelquinteros/gotext",
"github.com/mlsquires/socketio",
"github.com/olekukonko/tablewriter",
"github.com/pkg/errors",
"github.com/pkg/sftp",
...
...
Gopkg.toml
View file @
8de3803d
...
...
@@ -29,6 +29,16 @@
source
=
"github.com/ibuler/ssh"
branch
=
"dev"
[[constraint]]
name
=
"github.com/googollee/go-engine.io"
source
=
"github.com/ibuler/go-engine.io"
branch
=
"master"
[[constraint]]
name
=
"github.com/googollee/go-socket.io"
source
=
"github.com/googollee/go-socket.io"
version
=
"1.4.1"
[[constraint]]
name
=
"github.com/jarcoal/httpmock"
version
=
"1.0.3"
...
...
@@ -90,7 +100,3 @@
[[constraint]]
name
=
"github.com/elastic/go-elasticsearch"
version
=
"0.0.0"
[[constraint]]
branch
=
"master"
name
=
"github.com/mlsquires/socketio"
cmd/ws.go
deleted
100644 → 0
View file @
dcfc1d79
package
main
import
(
"fmt"
"log"
"net/http"
socketio
"github.com/mlsquires/socketio"
)
func
main
()
{
server
,
err
:=
socketio
.
NewServer
(
nil
)
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
server
.
On
(
"connection"
,
func
(
s
socketio
.
Socket
)
error
{
fmt
.
Println
(
"connected:"
)
return
nil
})
server
.
On
(
"/ssh"
,
"host"
,
func
(
s
socketio
.
Conn
,
msg
interface
{})
{
fmt
.
Println
(
"host:"
)
})
server
.
On
(
"/ssh"
,
"data"
,
func
(
s
socketio
.
Conn
,
msg
interface
{})
{
fmt
.
Println
(
"On data"
)
})
server
.
OnEvent
(
"/"
,
"logout"
,
func
(
s
socketio
.
Conn
)
{
fmt
.
Println
(
"logout: "
)
last
:=
s
.
Context
()
.
(
string
)
s
.
Emit
(
"bye"
,
last
)
})
server
.
OnError
(
"/ssh"
,
func
(
e
error
)
{
fmt
.
Println
(
"meet error:"
,
e
)
})
server
.
OnDisconnect
(
"/ssh"
,
func
(
s
socketio
.
Conn
,
msg
string
)
{
fmt
.
Println
(
"closed"
,
msg
)
})
go
server
.
Serve
()
defer
server
.
Close
()
http
.
Handle
(
"/socket.io/"
,
server
)
http
.
Handle
(
"/"
,
http
.
FileServer
(
http
.
Dir
(
"./asset"
)))
log
.
Println
(
"Serving at localhost:5000..."
)
log
.
Fatal
(
http
.
ListenAndServe
(
":5000"
,
nil
))
}
pkg/httpd/handler.go
View file @
8de3803d
package
httpd
import
(
"cocogo/pkg/proxy"
"errors"
"fmt"
"io"
...
...
@@ -9,10 +8,11 @@ import (
"strings"
"github.com/gliderlabs/ssh"
socketio
"github.com/googollee/go-socket.io"
uuid
"github.com/satori/go.uuid"
"github.com/googollee/go-socket.io"
"github.com/satori/go.uuid"
"cocogo/pkg/logger"
"cocogo/pkg/proxy"
"cocogo/pkg/service"
)
...
...
@@ -65,6 +65,7 @@ func OnConnectHandler(s socketio.Conn) error {
s
.
SetContext
(
ctx
)
conns
.
AddWebConn
(
s
.
ID
(),
conn
)
logger
.
Info
(
"On Connect handler end"
)
s
.
Emit
(
"3"
)
return
nil
}
...
...
@@ -98,7 +99,6 @@ func OnHostHandler(s socketio.Conn, message HostMsg) {
}
ctx
:=
s
.
Context
()
.
(
WebContext
)
userR
,
userW
:=
io
.
Pipe
()
conn
:=
conns
.
GetWebConn
(
s
.
ID
())
clientConn
:=
&
Client
{
...
...
@@ -111,6 +111,7 @@ func OnHostHandler(s socketio.Conn, message HostMsg) {
conn
.
AddClient
(
clientID
,
clientConn
)
proxySrv
:=
proxy
.
ProxyServer
{
UserConn
:
clientConn
,
User
:
ctx
.
User
,
Asset
:
&
asset
,
SystemUser
:
&
systemUser
}
go
proxySrv
.
Proxy
()
}
func
OnTokenHandler
(
s
socketio
.
Conn
,
message
TokenMsg
)
{
...
...
@@ -203,3 +204,7 @@ func OnLogoutHandler(s socketio.Conn, message string) {
}
_
=
client
.
Close
()
}
func
OnDisconnect
(
s
socketio
.
Conn
,
msg
string
)
{
logger
.
Debug
(
"OnDisconnect trigger"
)
}
pkg/httpd/server.go
View file @
8de3803d
package
httpd
import
(
"cocogo/pkg/config"
"cocogo/pkg/logger"
"github.com/googollee/go-engine.io"
"github.com/googollee/go-socket.io"
"github.com/satori/go.uuid"
"net/http"
"strconv"
"strings"
"sync"
socketio
"github.com/googollee/go-socket.io"
"cocogo/pkg/config"
"cocogo/pkg/logger"
)
var
(
...
...
@@ -16,19 +17,28 @@ var (
conns
=
&
connections
{
container
:
make
(
map
[
string
]
*
WebConn
),
mu
:
new
(
sync
.
RWMutex
)}
)
type
UUIDSessionIDGenerator
struct
{
}
func
(
u
*
UUIDSessionIDGenerator
)
NewID
()
string
{
return
strings
.
Split
(
uuid
.
NewV4
()
.
String
(),
"-"
)[
4
]
}
func
StartHTTPServer
()
{
conf
:=
config
.
GetConf
()
server
,
err
:=
socketio
.
NewServer
(
nil
)
option
:=
engineio
.
Options
{}
server
,
err
:=
socketio
.
NewServer
(
&
option
)
if
err
!=
nil
{
logger
.
Fatal
(
err
)
}
server
.
OnConnect
(
"/ssh"
,
TestOnConnectHandler
)
server
.
OnConnect
(
"/ssh"
,
OnConnectHandler
)
server
.
OnDisconnect
(
"/ssh"
,
OnDisconnect
)
server
.
OnError
(
"/ssh"
,
OnErrorHandler
)
server
.
OnEvent
(
"/ssh"
,
"host"
,
Test
OnHostHandler
)
server
.
OnEvent
(
"/ssh"
,
"token"
,
OnTokenHandler
)
server
.
OnEvent
(
"/ssh"
,
"data"
,
Test
OnDataHandler
)
server
.
OnEvent
(
"/ssh"
,
"resize"
,
Test
OnResizeHandler
)
server
.
OnEvent
(
"/ssh"
,
"logout"
,
Test
OnLogoutHandler
)
server
.
OnEvent
(
"/ssh"
,
"host"
,
OnHostHandler
)
//
server.OnEvent("/ssh", "token", OnTokenHandler)
server
.
OnEvent
(
"/ssh"
,
"data"
,
OnDataHandler
)
server
.
OnEvent
(
"/ssh"
,
"resize"
,
OnResizeHandler
)
server
.
OnEvent
(
"/ssh"
,
"logout"
,
OnLogoutHandler
)
go
server
.
Serve
()
defer
server
.
Close
()
...
...
pkg/httpd/test.go
deleted
100644 → 0
View file @
dcfc1d79
package
httpd
import
(
"fmt"
"github.com/googollee/go-socket.io"
"github.com/satori/go.uuid"
)
func
TestOnConnectHandler
(
s
socketio
.
Conn
)
error
{
s
.
SetContext
(
""
)
fmt
.
Println
(
"connected:"
,
s
.
ID
())
return
nil
}
func
TestOnHostHandler
(
s
socketio
.
Conn
,
msg
HostMsg
)
{
fmt
.
Println
(
"On host"
)
secret
:=
msg
.
Secret
clientID
:=
uuid
.
NewV4
()
.
String
()
emitMsg
:=
EmitRoomMsg
{
clientID
,
secret
}
s
.
Emit
(
"room"
,
emitMsg
)
s
.
Emit
(
"data"
,
DataMsg
{
Room
:
clientID
,
Data
:
"Hello world"
})
}
func
TestOnDataHandler
(
s
socketio
.
Conn
,
msg
string
)
{
s
.
Emit
(
"data"
,
msg
)
}
func
TestOnResizeHandler
(
s
socketio
.
Conn
,
msg
ResizeMsg
)
{
fmt
.
Println
(
"On Resize msg"
)
}
func
TestOnLogoutHandler
(
s
socketio
.
Conn
,
msg
string
)
{
fmt
.
Println
(
"On logout msg"
)
}
pkg/httpd/wscontext.go
deleted
100644 → 0
View file @
dcfc1d79
package
httpd
import
(
"cocogo/pkg/model"
"context"
"github.com/gliderlabs/ssh"
"github.com/googollee/go-socket.io"
)
type
contextKey
struct
{
name
string
}
var
(
ContextKeyUser
=
&
contextKey
{
"user"
}
ContextKeyAsset
=
&
contextKey
{
"asset"
}
ContextKeySystemUser
=
&
contextKey
{
"systemUser"
}
ContextKeyLocalAddr
=
&
contextKey
{
"localAddr"
}
ContextKeyConnection
=
&
contextKey
{
"connection"
}
ContextKeyClient
=
&
contextKey
{
"client"
}
)
type
WSContext
interface
{
context
.
Context
User
()
*
model
.
User
Asset
()
*
model
.
Asset
SystemUser
()
*
model
.
SystemUser
SSHSession
()
*
ssh
.
Session
SSHCtx
()
*
ssh
.
Context
SetValue
(
key
,
value
interface
{})
}
type
WebSocketContext
struct
{
context
.
Context
}
// user 返回当前连接的用户model
func
(
ctx
*
WebSocketContext
)
User
()
*
model
.
User
{
return
ctx
.
Value
(
ContextKeyUser
)
.
(
*
model
.
User
)
}
func
(
ctx
*
WebSocketContext
)
Asset
()
*
model
.
Asset
{
return
ctx
.
Value
(
ContextKeyAsset
)
.
(
*
model
.
Asset
)
}
func
(
ctx
*
WebSocketContext
)
SystemUser
()
*
model
.
SystemUser
{
return
ctx
.
Value
(
ContextKeySystemUser
)
.
(
*
model
.
SystemUser
)
}
func
(
ctx
*
WebSocketContext
)
Connection
()
*
WebConn
{
return
ctx
.
Value
(
ContextKeyConnection
)
.
(
*
WebConn
)
}
func
(
ctx
*
WebSocketContext
)
Client
()
*
Client
{
return
ctx
.
Value
(
ContextKeyClient
)
.
(
*
Client
)
}
func
(
ctx
*
WebSocketContext
)
SetValue
(
key
,
value
interface
{})
{
ctx
.
Context
=
context
.
WithValue
(
ctx
.
Context
,
key
,
value
)
}
func
applySessionMetadata
(
ctx
*
WebSocketContext
,
sess
ssh
.
Session
)
{
ctx
.
SetValue
(
ContextKeyLocalAddr
,
sess
.
LocalAddr
())
}
func
NewContext
(
s
socketio
.
Conn
)
(
*
WebSocketContext
,
context
.
CancelFunc
)
{
parent
,
cancel
:=
context
.
WithCancel
(
context
.
Background
())
ctx
:=
&
WebSocketContext
{
parent
}
return
ctx
,
cancel
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment