Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Socket Gateway Interface

License

NotificationsYou must be signed in to change notification settings

AstRonin/sgi

Repository files navigation

Application is written on Erlang. General design principles are: fast, low memory and modularity.

SGI gives possibility simple and smart way to connect to any server byTCPand has other protocols working under TCP.It supports two protocols:

  • FastCGI.This protocol is common for connect toPHP (FPM).
  • uwsgi.This protocol is the native protocol used by theuWSGI server.See 3-th sample for more details.

Socket Client

IncludesBalancer andPool, is an importent component of the app. It can connect to any number of servers. It is flexible and easilyconfigurable.If server has down then Balancer will not send the requests and it some times will сheck server availability.

Balancer can open new connections as needed on the fly and starts with a small necessary quantity of connections. If some socket will not use some time then this socket will be closed freeing memory.

Balancer has two balancing methods:blurred andpriority. Please look toSample 4 to get an idea of the advantages of each. It will allow to configure Socket Client for different server architectures.

Proxy

Application be able to create connect through the proxy, now support SOCKS5 protocol,and you can send message, for example through theTor.@seeConfiguration section.

Base components

Requirements

  • Erlang 18.1+

Documentation

Read documentation inWiki.

Upgrade

ReadUPGRADE before installation new version.

Try Samples

Sample 1 - Add a content from other languages inside of your Site.

This sample shows you how you can add "Busines Logic" (big or old) to your site using PHP files.

It is based on the sample fromn2o.

$ git clone git://github.com/astronin/sgi$ cd sgi/samples$ ./mad deps compile plan$ ./mad repl

Run php as fcgi server:

$ sudo service php5-fpm start

Now you can try it out:http://localhost:8000

Sample 2 - Your whole common site after erlang server and WebSocket instead of Ajax.

This sample shows you how you can run your site (written in other PL) with support of WebSocket. Forget about Ajax and do your page much more faster.

You have the following advantages compared to Ajax even in common web page:

  • Fast
  • Low overhead, especially over https
  • Easy forwarding a file
  • Saving CPU resources of both a client and a server
Setup:
$ git clone git://github.com/astronin/sgi$ cd sgi/samples

Change app in rebar.config:

$ vim samples/apps/rebar.config

{sub_dirs, [ "review" ]}. ->{sub_dirs, [ "review2" ]}.

Change app in sys.config:

{n2o, [{app,review2}]}

Run FPM:

$ sudo service php5-fpm start

Run Server:

$ ./mad deps compile plan$ ./mad repl

Url:http://localhost:8000/site.php

Sample 3 - Like Sample 2, but using Python.

This sample shows you how you can run your site (wrote in Python and supportuwsgi protocol) with support of WebSocket.For this you need to use serveruWSGI.

Setup:
$ git clone git://github.com/astronin/sgi$ cd sgi/samples

Change app in rebar.config:

$ vim samples/apps/rebar.config

{sub_dirs, [ "review" ]}. ->{sub_dirs, [ "review3" ]}.

Change app in sys.config:

{n2o, [{app,review3}]},{sgi, [{servers, [    [{name,default}, {address,localhost}, {port,3031}]]}]}

Run uWSGI:

$ uwsgi --socket 127.0.0.1:3031 --wsgi-file <your path clone>sgi/samples/cgi-scripts/python/myapp.py

Run Server:

$ ./mad deps compile plan$ ./mad repl

Url:http://localhost:8000/

Sample 4 - Part of socket connection

This sample shows you how you can use TCP Client of this app.Thanks to the smart balancer Client can connect to any number of servers in different methods:priority orblurred.

Setup:
$ git clone git://github.com/astronin/sgi$ cd sgi/samples

Change app in rebar.config:

$ vim samples/apps/rebar.config

{sub_dirs, [ "review" ]}. ->{sub_dirs, [ "review4" ]}.

Change app in sys.config:

{n2o, [{app,review4}]}

Change following settings insys.config.Sample will start 10 servers with 5 processes.Client will connect with 5 sockets on each server.

{servers, [    [{name,default}, {address,localhost}, {port,10000}, {timeout,60000}, {weight,10}, {start_connections,4}, {max_connections,5}, {max_fails,5}, {failed_timeout,60}],    [{name,aaa1},    {address,localhost}, {port,10001}, {timeout,60000}, {weight,9},  {start_connections,4}, {max_connections,5}, {max_fails,5}, {failed_timeout,60}],    [{name,aaa2},    {address,localhost}, {port,10002}, {timeout,60000}, {weight,8},  {start_connections,4}, {max_connections,5}, {max_fails,5}, {failed_timeout,60}],    [{name,aaa3},    {address,localhost}, {port,10003}, {timeout,60000}, {weight,7},  {start_connections,4}, {max_connections,5}, {max_fails,5}, {failed_timeout,60}],    [{name,aaa4},    {address,localhost}, {port,10004}, {timeout,60000}, {weight,6},  {start_connections,4}, {max_connections,5}, {max_fails,5}, {failed_timeout,60}],    [{name,aaa5},    {address,localhost}, {port,10005}, {timeout,60000}, {weight,5},  {start_connections,4}, {max_connections,5}, {max_fails,5}, {failed_timeout,60}],    [{name,aaa6},    {address,localhost}, {port,10006}, {timeout,60000}, {weight,4},  {start_connections,4}, {max_connections,5}, {max_fails,5}, {failed_timeout,60}],    [{name,aaa7},    {address,localhost}, {port,10007}, {timeout,60000}, {weight,3},  {start_connections,4}, {max_connections,5}, {max_fails,5}, {failed_timeout,60}],    [{name,aaa8},    {address,localhost}, {port,10008}, {timeout,60000}, {weight,2},  {start_connections,4}, {max_connections,5}, {max_fails,5}, {failed_timeout,60}],    [{name,aaa9},    {address,localhost}, {port,10009}, {timeout,60000}, {weight,1},  {start_connections,4}, {max_connections,5}, {max_fails,5}, {failed_timeout,60}]]},{balancing_method,priority},%blurred or priority

Run Server:

$ ./mad deps compile plan$ ./mad repl

Change insys.config next{balancing_method, blurred},

$ ./mad repl

Sample will create the two files:server_distribution(priority).csv andserver_distribution(blurred).csvwhich shows difference between two methods of connection balancing to a server.Open files in Excel(or other) and insertXY(Scater) graph:

priorityBelow are results with next weights:

Server portWeight
100001
100012
100023
100034
1000410
100059
100068
100077
100086
100095
priority
priority

[8]ページ先頭

©2009-2025 Movatter.jp