php의 웹소컷 서버사이드는 주로 ws(http용) 프로토콜을 이용해왔다.
그래서 https(ssl)프로토콜을 장착하고 나서 ws웹소켓 프로토콜을 사용할 수 없게되자, php에서 wss를 운용할 수 있는 방법을 찾아봤다.
1) 우회하는 방식 쓰기
- 이건 비추천한다.
- 이걸 사용하는 내내 웹서버가 종종 다운됐기 때문이다.
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
ProxyPass /wss2/ ws://웹주소:소켓통신용포트/
위의 3가지 모듈(mod_proxy.so, mod_proxy_http.so, mod_proxy_wstunnel.so)을 쓸 수 있게 만들고,
ProxyPass명령을 이용해 우회시키는 방법이다.
즉, /wss2/의 경로를 입력하게 되면,
ws://웹주소:소켓통신용포트/로 가게끔 하는 것이다.
이를 실제 웹클라이언트용 소스에서
var websocket = new WebSocket("wss://웹주소/wss2/chatting/php-socket.php");
위와 같이 써주면
wss://웹주소/wss2/chatting/php-socket.php
↓
ws://웹주소:소켓통신용포트/chatting/php-socket.php
으로 인식되는 것이다.
2) wss 프로토콜 전용 소켓서버 구축하기
- 두번째 방법이 안정적이고 좋은 것 같다.
- 마침 오픈소스도 있으니 링크를 걸어놓겠다.
https://github.com/napengam/phpWebSocketServer
위의 소스를 다운받아 서버에 설치하고
유의할 점을 몇가지 적어주겠다.
/server/websock.ini 설정파일을 꼭 입력해야한다.
adress='wss://웹주소:소켓통신용포트'
logfile=로그남길 경로
console=false
certFile='certificate.crt파일 경로'
pkFile='private.key파일 경로'
대강 이런식으로 남겨야 한다.
그리고 /webClient/에 test용 파일이 있는데,
사진 설명을 입력하세요.
이런식으로 되어있다.
여기에
$Address = 'wss://웹주소:소켓통신용포트';
이런 변수를 지정해주면 echo, broadcast등 소켓통신을 사용할 수 있다.
해당 소켓통신엔 모드에 따라 기능이 나눠지는데,
ready : 초기화
broadcast : 자신을 제외한 남들에게 메세지를 송신
이런 식으로 나뉜다.
이를 이용해 커스터마이징을 하면 채팅창 구현, 실시간 알림 서비스등을 구현할 수 있을 것이다.
'PHP' 카테고리의 다른 글
안드로이드 스튜디오 dependency 문제해결 (0) | 2024.10.15 |
---|---|
(mariadb, mysql 오류해결) too many connections (0) | 2024.07.06 |
php exec함수가 제대로 실행이 안될 때 (selinux설정 및 재시작) (0) | 2023.10.18 |
window.print() 사용할 때 css까지 잘 적용시키는 방법 (0) | 2023.10.05 |
[mysql] 테그 검색에 최적화된 함수 : FIND_IN_SET (0) | 2023.09.20 |