Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 키워드 정리
- php-fpm
- centOS7
- MySQL
- 기타정리
- 메모
- jquery
- laravel
- 시벌이슈
- 복습 #회사
- 키워드
- php
- Backend
- 코딩테스트
- 에러해결
- linux #centos
- ratchet
- AWS
- error
- 보안
- php artisan
- NGINX
- 일상
- vagrant
- 개인공부
- 네이버싫어
- 카카오가고싶다
- 작업물 #영상편집 #서브컬쳐
- 작업물
- centOS
Archives
- Today
- Total
개발을 간바루Joy 하게
[PHP] Socket Server Code 본문
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
php<?php
$address = "127.0.0.1";
$port = 9001;
$c_sock = array();
$c_info = array();
$s_sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if($s_sock === false){
echo "socket_create() Error! reason :".socket_strerror(socket_last_error()) . "\n";
echo "<br/>";
}else{
echo "소켓 생성 성공";
}
//서버 소켓에 주소와 포트번호 부여
socket_bind($s_sock, $address, $port) or die('Could not bind to address');
//서버 소켓을 클라이언트 대기 상태로 만듦
socket_listen($s_sock);
while(true){
$sockArr = array_merge(array($s_sock),$c_sock);
//소켓 이벤트 대기
if(socket_select($sockArr, $tWrite = NULL, $tExcept = NULL, 10) > 0){
foreach($sockArr as $sock){
//새로운 클라이언트 접속
if($sock == $s_sock){
//접속 허용
$t_socket = socket_accept($s_sock);
//클라이언트 접속정보 가져오기
socket_getpeername($t_socket,$sock_ip,$sock_port);
//해당 클라이언트 접속정보를 소켓배열에 input
$c_sock[$t_socket] = $t_socket;
$c_info[$t_socket] = array('ip'=>$sock_ip,'port'=>$sock_port);
msg("client connect : ".$sockIp.":".$sockPort."\n");
}else{ //접속해있는 클라이언트일경우 이벤트발생함을 의미
$buf = socket_read($sock, 4096);
//접속종료
if(!$buf){
exceptSocket(&$c_sock, &$c_info, $sock);
msg("client connection broken : ".$sockIp.":".$sockPort."\n");
}else{//이벤트 작성
$in = "hello socket server!!";
socket_write($sock, $in);
socket_close($$sock);
}
}
}
}
}
function exceptSocket(&$sockSet, &$infoSet, $sock)
{
unset($sockSet[$sock]);
unset($infoSet[$sock]);
// array_merge 함수에서 error 발생을 막기위한 처리
if(count($sockSet)==0)
{
$sockSet = array();
$infoSet = array();
}
}
function msg($msg){
echo "SERVER >> ".$msg;
}
?>
|
cs |
'프로그래밍 > PHP' 카테고리의 다른 글
[PHP] 배열 정렬 코드 (0) | 2022.01.21 |
---|---|
[PHP] Websocket Ratchet Client 사용하기 (0) | 2021.10.28 |
[PHP] Ratchet Websocket 설치 및 사용방법 (0) | 2021.09.15 |
[PHP] Ratchet WebSocket Connection limit 이슈 (0) | 2021.09.09 |
[PHP] 엑셀 csv 파일 가공 (0) | 2021.05.04 |