2022年6月26日 星期日
2020年4月10日 星期五
2020年4月7日 星期二
天涼好個秋
在一個陰雨綿綿的下午,開會開到昏昏欲睡的我,突然一陣雷聲,喚醒了我,原來剛剛主管CUE到我,我沒有任何反應, 這時後我驚醒了,快速地回答所有問題,還被告知等會還有其他會議,此時內心的我...無數個OOOXX跑馬燈跑過。
任務
- 開會任務解鎖
- 新的會議
- 提出建議
- 思考
2020年2月5日 星期三
使用 nginx websocket https to http
最近專案遇到一坑,之前 http 使用 ws 都很順利,但是上了https之後,網頁強制要使用 wss... 就卡住了
Nginx 配置 轉發代理,網路上很多教學都寫一半,最後看懂就~ 這樣寫最精簡,直接 調用ws 去處理後續的東西
NGINX配置文件
Go Server
Go Client
----------------------
Nginx 配置 轉發代理,網路上很多教學都寫一半,最後看懂就~ 這樣寫最精簡,直接 調用ws 去處理後續的東西
NGINX配置文件
server {
server_name 域名;
location / {
root PATH;
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
root PATH;
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
111111
include fastcgi_params;
}
listen 443 ssl; # managed by Certbot
ssl_certificate 證書
ssl_certificate_key 證書
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
location / {
proxy_pass 服務位置
#例如 http://127.0.0.1:8092/ws;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
add_header Access-Control-Allow-Origin *;
proxy_connect_timeout 60s;
proxy_read_timeout 500s;
proxy_send_timeout 500s;
}
}
server {
if ($host = 域名) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name 域名;
return 404; # managed by Certbot
}
package main
import (
"log"
"net/http"
"github.com/gorilla/websocket"
)
func main() {
upgrader := &websocket.Upgrader{
//如果有 cross domain 的需求,可加入這個,不檢查 cross domain
CheckOrigin: func(r *http.Request) bool { return true },
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
c, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Println("upgrade:", err)
return
}
defer func() {
log.Println("disconnect !!")
c.Close()
}()
for {
mtype, msg, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
break
}
log.Printf("receive: %s\n", msg)
msg = []byte("伺服器接收成功")
log.Printf("re_send: %s\n", msg)
err = c.WriteMessage(mtype, msg)
if err != nil {
log.Println("write:", err)
break
}
}
})
log.Println("server start at :8000")
log.Fatal(http.ListenAndServe(":8000", nil))
}
package main
import (
"log"
"github.com/gorilla/websocket"
)
func main() {
// ws_connection := "ws://fishstg.1c5game.com:8000/echo"
// ws_connection := "wss://18.139.24.117:8092/ws"
ws_connection := "wss://fishstg.1c5game.com/ws"
// ws_connection := "wss://echo.websocket.org/"
log.Printf("ws_connection: %s\n", ws_connection)
c, _, err := websocket.DefaultDialer.Dial(ws_connection, nil)
if err != nil {
log.Fatal("dial:", err)
}
defer c.Close()
i := 1
for i <= 10 {
// fmt.Println(i)
send_msg := "{\"protocol\" : \"platform_debit_all\", \"data\" :{ \"id\":1 , \"gametoken\":123456465 }}"
log.Printf("send_msg: %s\n", send_msg)
err = c.WriteMessage(websocket.TextMessage, []byte(send_msg))
if err != nil {
log.Println(err)
return
}
_, msg, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
return
}
log.Printf("received: %s\n", msg)
i++
}
}
2019年12月24日 星期二
PHP 數值格式化
<?php
$s = 1000000;
$s1 = 1000000.1111110;
echo return_number_int_or_floor($s,2) . "<hr>";
echo return_number_int_or_floor($s1,2) . "<hr>";
function return_number_int_or_floor($number, $floor = 0)
{
if (floor($number) == $number) {
return $formattedNum = substr(rtrim(number_format($number, $floor, ".", ","), 0), 0, -1);
}
return $formattedNum = rtrim(number_format($number, $floor, ".", ","), 0);
}
數值處理,正格式化,剃除整數最後字串為.00的方法
2019年12月18日 星期三
Clear Cache in Laravel
Clear Cache in Laravel
第一次遇到 route 被 Cached...........................................
最快解法
第一次遇到 route 被 Cached...........................................
最快解法
Route::get('/clear-cache', function() {
Artisan::call('cache:clear');
return "Cache is cleared";
});
2019年12月12日 星期四
PHP~當客戶端喔
一個寧靜的下午
遇到一個要由PHP 當 客戶端的情境
往往都是PHP 當伺服器在接收客戶端的服務
這次反過來要去當客戶端
發送訊息給另一個伺服器
服務的伺服器為WebSocket Server
這個要搭建起來用PHP + Html5 根本無難度
但是要由PHP send message .... 一直卡住
翻尋許久,求助大大神
最後滑倒後踢到垃圾桶,踩到黃金等等
發現了
遇到一個要由PHP 當 客戶端的情境
往往都是PHP 當伺服器在接收客戶端的服務
這次反過來要去當客戶端
發送訊息給另一個伺服器
服務的伺服器為WebSocket Server
這個要搭建起來用PHP + Html5 根本無難度
但是要由PHP send message .... 一直卡住
翻尋許久,求助大大神
最後滑倒後踢到垃圾桶,踩到黃金等等
發現了
# "textalk/websocket
# use WebSocket\Client;
# composer require textalk/websocket
開心的加載進去,剩下的就差不多了....
$client = new Client("ws://" . $this->input->server('HTTP_HOST') . ":".'port');
$client->send('47b6"}}');
$client->receive();
<途中插曲>
Port 忘記打開.... 所以一直連接不上
2019年12月4日 星期三
WebSocket 壓力測試 Example(多執行緒)
使用工具 :
Python 3.8
程式碼:
import websocket
try:
import thread
except ImportError:
import _thread as thread
import time
import threading
import json
"""
這是一個卡 WebSocket 的 Example
"""
def on_message(ws, message):
# parse x:
message = json.loads(message)
print("message", message, "\n")
print("\n");
def on_error(ws, error):
# print(error)
print("error", error, "\n")
def on_close(ws):
print("### closed ###")
def on_open(ws):
print("ws coennet...")
# def run(*args):
# print("ws coennet...")
# # for i in range(3):
# # time.sleep(1)
# # ws.send("Hello %d" % i)
# # time.sleep(1)
# # ws.close()
# print("thread terminating...")
# thread.start_new_thread(run, ())
def run_s(i):
websocket.enableTrace(True)
wsc = "接口"
ws = websocket.WebSocketApp(wsc,
on_message=on_message,
on_error=on_error,
on_close=on_close)
ws.on_open = on_open
ws.run_forever()
if __name__ == "__main__":
# 建立 5 個子執行緒
num = 1
threads = []
for i in range(num):
threads.append(threading.Thread(target=run_s, args=(i,)))
threads[i].start()
# 等待所有子執行緒結束
for i in range(num):
threads[i].join()
print("Done.")
Python 3.8
程式碼:
import websocket
try:
import thread
except ImportError:
import _thread as thread
import time
import threading
import json
"""
這是一個卡 WebSocket 的 Example
"""
def on_message(ws, message):
# parse x:
message = json.loads(message)
print("message", message, "\n")
print("\n");
def on_error(ws, error):
# print(error)
print("error", error, "\n")
def on_close(ws):
print("### closed ###")
def on_open(ws):
print("ws coennet...")
# def run(*args):
# print("ws coennet...")
# # for i in range(3):
# # time.sleep(1)
# # ws.send("Hello %d" % i)
# # time.sleep(1)
# # ws.close()
# print("thread terminating...")
# thread.start_new_thread(run, ())
def run_s(i):
websocket.enableTrace(True)
wsc = "接口"
ws = websocket.WebSocketApp(wsc,
on_message=on_message,
on_error=on_error,
on_close=on_close)
ws.on_open = on_open
ws.run_forever()
if __name__ == "__main__":
# 建立 5 個子執行緒
num = 1
threads = []
for i in range(num):
threads.append(threading.Thread(target=run_s, args=(i,)))
threads[i].start()
# 等待所有子執行緒結束
for i in range(num):
threads[i].join()
print("Done.")
2019年10月5日 星期六
快速且大量數據寫入Mysql。每秒10萬筆數據插入
最近在玩 Golang 語言,發現它的平行雲算真的強大 !!!!!
關鍵字
關鍵字
- sync.WaitGroup
- 所先引用函式庫
- 設定 wg.Add(1) 與 調用要跑的方法
- 最後 呼叫 wg.Wait() 阻塞它,等待 goroutine們的執行完畢
-------------------------------------------------------------
- 所先引用函式庫
- 設定 wg.Add(1) 與 調用要跑的方法
- 最後 呼叫 wg.Wait() 阻塞它,等待 goroutine們的執行完畢
2018年8月17日 星期五
訂閱:
文章 (Atom)
拯救老電腦
Sempron 3850 Socket AM1入門四核處理器 2014 8ram 作業系統 windows 10 1904 評論: 八年的核心,其他的故障電腦拆解零組件都是拼裝. 整體使用上,可以基本文書,瀏覽網站,聽音樂等等都可以接受的。 下次再來繼續搞更多..
-
讓我有機會去回訪一下~
-
恩 今天要騙人的 要怎樣的 趕快做一做吧 還有祝 那位 今天生日的朋友 雖然之前那件事讓我很不爽 但是 妳 生日我還是會記得的 19歲生日不能大慶祝~~ 還是廢話一句 妳的脾氣 依舊很火爆和衝動