• 14-09-2019, 17:23:43
    #1
    Merhaba;

    sunucumda ssller lets encrpyt ile otomatik oluşturuluyor.

    Websocket bağlantısı yapıyorum orada sıkıntı yok ancak javascript ile WSS protokulu ile çağırdımda ( çünkü sayfa https ) ssl hatası veriyor.

    Kodlar aşağıda yardımcı olabilirmisiniz ?

    Socket.php
    	<script>  
    	function showMessage(messageHTML) {
    		$('#chat-box').append(messageHTML);
    	}
    
    	$(document).ready(function(){
    		var websocket = new WebSocket("wss://site.com:8090/2/php-socket.php"); 
    		websocket.onopen = function(event) { 
    			showMessage("<div class='chat-connection-ack'>Connection is established!</div>");		
    		}
    		websocket.onmessage = function(event) {
    			var Data = JSON.parse(event.data);
    			showMessage("<div class='"+Data.message_type+"'>"+Data.message+"</div>");
    			$('#chat-message').val('');
    		};
    		
    		websocket.onerror = function(event){
    			showMessage("<div class='error'>Problem due to some Error</div>");
    		};
    		websocket.onclose = function(event){
    			showMessage("<div class='chat-connection-ack'>Connection Closed</div>");
    		}; 
    		
    		$('#frmChat').on("submit",function(event){
    			event.preventDefault();
    			$('#chat-user').attr("type","hidden");		
    			var messageJSON = {
    				chat_user: $('#chat-user').val(),
    				chat_message: $('#chat-message').val()
    			};
    			websocket.send(JSON.stringify(messageJSON));
    		});
    	});
    
    
    
    
    	</script>

    <?php
    define('HOST_NAME',"localhost"); 
    define('PORT',"8090");
    $null = NULL;
    
    require_once("class.chathandler.php");
    $chatHandler = new ChatHandler();
    
    $socketResource = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    socket_set_option($socketResource, SOL_SOCKET, SO_REUSEADDR, 1);
    socket_bind($socketResource, 0, PORT);
    socket_listen($socketResource);
    
    $clientSocketArray = array($socketResource);
    while (true) {
    	$newSocketArray = $clientSocketArray;
    	socket_select($newSocketArray, $null, $null, 0, 10);
    	
    	if (in_array($socketResource, $newSocketArray)) {
    		$newSocket = socket_accept($socketResource);
    		$clientSocketArray[] = $newSocket;
    		
    		$header = socket_read($newSocket, 1024);
    		$chatHandler->doHandshake($header, $newSocket, HOST_NAME, PORT);
    		
    		socket_getpeername($newSocket, $client_ip_address);
    		$connectionACK = $chatHandler->newConnectionACK($client_ip_address);
    		
    		$chatHandler->send($connectionACK);
    		
    		$newSocketIndex = array_search($socketResource, $newSocketArray);
    		unset($newSocketArray[$newSocketIndex]);
    	}
    	
    	foreach ($newSocketArray as $newSocketArrayResource) {	
    		while(socket_recv($newSocketArrayResource, $socketData, 1024, 0) >= 1){
    			$socketMessage = $chatHandler->unseal($socketData);
    			$messageObj = json_decode($socketMessage);
    			
    			$chat_box_message = $chatHandler->createChatBoxMessage($messageObj->chat_user, $messageObj->chat_message);
    			$chatHandler->send($chat_box_message);
    			break 2;
    		}
    		
    		$socketData = @socket_read($newSocketArrayResource, 1024, PHP_NORMAL_READ);
    		if ($socketData === false) { 
    			socket_getpeername($newSocketArrayResource, $client_ip_address);
    			$connectionACK = $chatHandler->connectionDisconnectACK($client_ip_address);
    			$chatHandler->send($connectionACK);
    			$newSocketIndex = array_search($newSocketArrayResource, $clientSocketArray);
    			unset($clientSocketArray[$newSocketIndex]);			
    		}
    	}
    }
    socket_close($socketResource);




    Yokmu arkadaşlar çözümü olan?
  • 14-09-2019, 23:53:06
    #2
    ibagmen adlı üyeden alıntı: mesajı görüntüle
    Merhaba;

    sunucumda ssller lets encrpyt ile otomatik oluşturuluyor.

    Websocket bağlantısı yapıyorum orada sıkıntı yok ancak javascript ile WSS protokulu ile çağırdımda ( çünkü sayfa https ) ssl hatası veriyor.

    Kodlar aşağıda yardımcı olabilirmisiniz ?

    Socket.php
        <script>  
        function showMessage(messageHTML) {
            $('#chat-box').append(messageHTML);
        }
    
        $(document).ready(function(){
            var websocket = new WebSocket("wss://site.com:8090/2/php-socket.php");
            websocket.onopen = function(event) {
                showMessage("<div class='chat-connection-ack'>Connection is established!</div>");        
            }
            websocket.onmessage = function(event) {
                var Data = JSON.parse(event.data);
                showMessage("<div class='"+Data.message_type+"'>"+Data.message+"</div>");
                $('#chat-message').val('');
            };
            
            websocket.onerror = function(event){
                showMessage("<div class='error'>Problem due to some Error</div>");
            };
            websocket.onclose = function(event){
                showMessage("<div class='chat-connection-ack'>Connection Closed</div>");
            };
            
            $('#frmChat').on("submit",function(event){
                event.preventDefault();
                $('#chat-user').attr("type","hidden");        
                var messageJSON = {
                    chat_user: $('#chat-user').val(),
                    chat_message: $('#chat-message').val()
                };
                websocket.send(JSON.stringify(messageJSON));
            });
        });
    
    
    
    
        </script>
    <?php
    define('HOST_NAME',"localhost");
    define('PORT',"8090");
    $null = NULL;
    
    require_once("class.chathandler.php");
    $chatHandler = new ChatHandler();
    
    $socketResource = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    socket_set_option($socketResource, SOL_SOCKET, SO_REUSEADDR, 1);
    socket_bind($socketResource, 0, PORT);
    socket_listen($socketResource);
    
    $clientSocketArray = array($socketResource);
    while (true) {
        $newSocketArray = $clientSocketArray;
        socket_select($newSocketArray, $null, $null, 0, 10);
        
        if (in_array($socketResource, $newSocketArray)) {
            $newSocket = socket_accept($socketResource);
            $clientSocketArray[] = $newSocket;
            
            $header = socket_read($newSocket, 1024);
            $chatHandler->doHandshake($header, $newSocket, HOST_NAME, PORT);
            
            socket_getpeername($newSocket, $client_ip_address);
            $connectionACK = $chatHandler->newConnectionACK($client_ip_address);
            
            $chatHandler->send($connectionACK);
            
            $newSocketIndex = array_search($socketResource, $newSocketArray);
            unset($newSocketArray[$newSocketIndex]);
        }
        
        foreach ($newSocketArray as $newSocketArrayResource) {    
            while(socket_recv($newSocketArrayResource, $socketData, 1024, 0) >= 1){
                $socketMessage = $chatHandler->unseal($socketData);
                $messageObj = json_decode($socketMessage);
                
                $chat_box_message = $chatHandler->createChatBoxMessage($messageObj->chat_user, $messageObj->chat_message);
                $chatHandler->send($chat_box_message);
                break 2;
            }
            
            $socketData = @socket_read($newSocketArrayResource, 1024, PHP_NORMAL_READ);
            if ($socketData === false) {
                socket_getpeername($newSocketArrayResource, $client_ip_address);
                $connectionACK = $chatHandler->connectionDisconnectACK($client_ip_address);
                $chatHandler->send($connectionACK);
                $newSocketIndex = array_search($newSocketArrayResource, $clientSocketArray);
                unset($clientSocketArray[$newSocketIndex]);            
            }
        }
    }
    socket_close($socketResource);




    Yokmu arkadaşlar çözümü olan?
    8090 portunda SSL kurulu mu? Wss yazınca direk socket sunucusu ve portu SSL'e geçmiş olmuyor. Socket'in olduğu porta da SSL kurulmalı. Örnek veriyorum;

    https://siteadi.com
    https://socket.siteadi.com:8433 gibi olması lazım.


    Ekleme: Proxy'nin de işe yaradığını söylemişler ama ben denemedim;

    http://nginx.org/en/docs/http/websocket.html
    https://www.freecodecamp.org/news/ho...-d0be0996c556/