용오름체험휴양마을영농조합법인 / 홍천 용오름캠핑장 팸투어 다녀왔어요.

용오름체험휴양마을영농조합법인 / 홍천 용오름캠핑장 팸투어 다녀왔어요. 강원도 홍천 서석면에 위치해있으며 1급수 용오름계곡 바로 옆에 있습니다.홍천군 1등 마을로 마을에서 직접 관리하는 용오름캠핑장,펜션 10개를 운영하고 있으며 각종 모임이 가능하도록 식당,회의실,야외무대가 설치되어 있습니다.홍천군 1등 마을답게 캠핑장,펜션 마을 전지역 wi-fi 사용이 가능하며 매년 봄 팸투어 실시, 여름엔 마을에서 재배한 홉으로 직접만든 맥주축제,마리소리 음악축제 를 열고 있습니다.계곡의 경우 수심이 다양하여 다이빙 포인트가 2곳이 있으며 아이들이 안전하게 물놀이를 할 수 있는 곳도 여러 곳 있습니다. 홍천 용오름캠핑장 팸투어 다녀왔어요. 요즘은 농산촌체험마을에서 캠핑과 여러프로그램을 같이 하는 곳이 추세더라고요. 아미산이 둘러쌓인 청정계곡이 흐르는 아름다운 용오름체험휴양마을 에서 운영하는 홍천 용오름캠핑장 팸투어 다녀왔어요. 테크 앞 강이... 붕어빵 가족의 담너머 세상구경 https://m.blog.naver.com/1092119/220711235599 가을여행-홍천여행- 홍천 용오름 마을 첫째날 여행의 계절 가을입니다. 요즘 저희는 강원도에 꽃힌 상태인지라...카페 행복한 이티씨와 함께하는 홍천 용오름 마을 1박2일 체험에 참가를 하였답니다! 평소 체험 시간보다 조금 늦은 출발을 해서 차가 밀리지 않으려나... 귀여운 단지 https://m.blog.naver.com/sanguidan/50181593653 용오름마을 캠핑장 여름휴가의 시즌이다.. 강원도의 계곡과 시원함을 만끽하기 위해 캠핑장을 검색하다 우연히 알게 된 홍천의 용오름 캠핑장.. 성수기라 캠핑장 요금들이 사악하다 용오름캠핑장 옆엔 해미르 캠핑장이 있는데... ★살로몬의 잇츠캠핑★ https://m.blog.naver.com/freeguy9040/20163628934 맥주효모로 만든 용오름맥주마을 바쏘 맥주샴푸와 맥주마스크팩... 1988년까지 맥주 원료인...

[PHP] Socket통신을 하는 방법

[PHP] Socket통신을 하는 방법

안녕하세요. 명월입니다.

이 글은 PHP에서 Socket통신을 하는 방법에 대한 글입니다.

PHP는 웹 스크립트 언어이기 때문에 사실 Socket 통신을 할 경우는 거의 없습니다. 웹 프로토콜은 비동기식으로 처리되는 사양이기 때문에 스크립트 안에서 다른 서버와 동기식의 통신을 하게되면 시스템이 매우 느려지게 됩니다.

왜냐하면 동기식의 처리가 전부 완료가 되고 스크립트가 종료가 되야 웹 응답이 나가는 구조이기 때문에 동기처리가 사양이 많거나 느리게 되면 똑같이 응답이 느려지는 결과가 나오기 때문입니다.

참고로 다른 웹 서버의 정보를 취득할 필요가 있다면 소켓 통신이 아닌 cURL를 통해 웹 프로토콜 통신을 하기 때문에 이 Socket은 더욱 사용할 일이 없겠네요.

링크 - [PHP] PHP의 HttpConnection 도구 cURL 사용 방법

그러나 프로젝트는 어떠한 사양이 올지 모르기 때문에 소켓 통신을 구현할 경우도 있습니다.

먼저 PHP에서 소켓을 사용하기 위해서는 php.ini를 수정할 필요가 있습니다.

초기에는 extension=sockets가 (;)로 주석처리가 되어 있는데 이 부분을 제거하면 됩니다.

그리고 PHP에서 소켓 통신을 알아보기 전에 server프로그램을 만들겠습니다.

링크 - [C# 강좌 - 32] 소켓 통신 - 1

using System; using System.Text; using System.Net; using System.Net.Sockets; namespace PHPSocketExample { class Program { static void Main(string[] args) { // 소켓 생성하고 Listen까지 만들자 IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9999); using (Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) { server.Bind(ipep); server.Listen(20); Console.WriteLine("Server Start... Listen port 9999..."); while (true) { // 클라이언트가 접속되었다. using (Socket client = server.Accept()) { IPEndPoint ip = (IPEndPoint)client.RemoteEndPoint; Console.WriteLine($"Address - {ip.Address} "); String message = "Welcome Socket Server"; Byte[] data = Encoding.Default.GetBytes(message); // 클라이언트로 메시지를 보낸다. client.Send(data); data = new Byte[1024]; // 클라이언트로 메시지를 받는다. client.Receive(data); message = Encoding.Default.GetString(data); Console.WriteLine(message); } } } } } }

이제 PHP에서 위 서버를 접속하는 소스를 작성하겠습니다.

링크 - https://www.php.net/manual/en/book.sockets.php

"; } // 접속을 합니다. $result = socket_connect($socket, $address, $port); if ($result === false) { echo "socket_connect() failed.

Reason: ($result) " . socket_strerror(socket_last_error($socket)) . "

"; } // 소켓 서버로부터 메시지를 받는다. $out = socket_read($socket, 1024); // 소켓 서버로 메시지를 보낸다. $in = "hello socket server!!"; socket_write($socket, $in, strlen($in)); }finally{ socket_close($socket); } ?> title

먼저 서버인 C# 콘솔 프로그램을 실행합니다.

그리고 php의 웹 사이트를 접속합니다.

웹 페이지의 응답은 일단 Welcome Socket Server이라는 메시지가 왔습니다. 이 메시지는 소켓 서버로 부터 온 메시지입니다.

소켓 서버로 부터 클라인언트로부터 메시지를 받고 console out을 했네요.

PHP에서도 소켓 접속되는 것을 확인했습니다.

제가 이 글을 쓰면서 메뉴얼에 PHP에서 클라이언트 접속 뿐아니라 서버도 만들 수 있네요.

소켓 서버를 만들 수 있다는 뜻은 그럼 웹 요청에 따른 쓰레드를 분기할 수 있다라는 소리가 되는 것 같은데..

그걸 판단하는 이유는 소켓 서버가 닫히지 않는 이상 웹 응답을 하지 않을 것입니다. 브라우저에서 요청 timeout이 넘어서면 커넥션을 강제 종료를 하기 때문에 그럼 web server의 세션은 강제 종료됩니다. 그 때 아마 소켓 서버도 강제 종료가 될 것입니다.

그런 이유로 PHP의 스크립트 환경에서 쓰레드를 생성할 수 있다는 것인데 그럼 쓰레드의 메모리 해제는 어떻게 할까라는 의문이 생깁니다. PHP는 Java와 다르게 GC, 즉 가비지 컬렉션이 없기 때문에 이런 식의 코드 작성은 분명 memory leak이 발생활 확율이 높을 듯 싶습니다. 아마 PHP에 초기 설치할 때, safe thread와 non-safe thread 버전이 있었는 걸로 기억하는데..

메모리 해제는 그렇다치고 PHP에서 세션에 상관없이 class를 싱글톤 형식으로 선언이 가능하다는 소리인데.. 그럼 이 뜻은 PHP가 값 참조 구조가 아닌 메모리 참조 구조로도 생성이 가능하다는 소리인데..

솔직히 저도 잘 모르겠네요.. 소켓 서버 하나 조사한 걸로 PHP의 개념이 흔들리는 듯한... 아시는 분은 댓글 부탁드립니다. 조사를 더해야 겠습니다.

솔직히 PHP로 서버를 만드는 건 리스크가 너무 클 것 같습니다. 차라리 Tomcat을 이용한 소켓 서버가 더 효율적일 지도 모르곘네요.

링크 - [Java] Tomcat 서버에서 소켓 서버를 만드는 방법

링크 - [Java] Tomcat의 websocket을 이용해서 socket서버 만들기

여기까지 PHP에서 Socket통신을 하는 방법에 대한 설명이었습니다.

궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.

from http://nowonbun.tistory.com/632 by ccl(A)

댓글

이 블로그의 인기 게시물

[2020 정보처리기사 실기 - 프로그래밍 언어 활용] 2. 언어 특성 활용...

[PHP] 네이버 Cloud Outbound Mailer API 파일 첨부하기

동적 메모리 할당_현재까지 내가 이해한 내용