Как распределить полученные данные от подключенного клиента другим подключенным клиентам при использовании многопоточности?

Похоже, что Symfony пытается сериализовать целый пользовательский объект в сеанс, а некоторые из полей не сериализуемы. Вы должны реализовать интерфейс \serializable и добавить только важные поля в метод сериализации.

class User implements UserInterface, ObjectManagerAware, \Serializable 

{
  ...
public function serialize()
{
    return serialize(array(
        $this->id,
        $this->username,
        $this->password
    ));
}


public function unserialize($serialized)
{
    list (
        $this->id,
        $this->username,
        $this->password
    ) = unserialize($serialized, array('allowed_classes' => false));
}

0
задан user2667389 20 January 2019 в 12:30
поделиться

1 ответ

  • создать список для хранения сокета.
  • запуск потока для обработки клиентского запроса.
  • при получении списка петель сообщений (исключая текущий сокет) для отправки сообщения другим клиентам.

Я изменяю ваш код следующим образом:

public class ServerThread extends Thread {
    private static List<Socket> sockets = new ArrayList<>();
    private Socket socket;

    public ServerThread(Socket socket) {
        this.socket = socket;
        sockets.add(socket);
    }

    @Override
    public void run() {
        try {
            // assume the data from client is a string  Hello Server
            String data = "Hello Server";
            // send data to other client
            for (Socket sc : sockets) {
                if (!sc.equals(socket)) {
                    sc.getOutputStream().write(data.getBytes());
                }
            }

        } catch (IOException ex) {
            System.out.println("Server exception: " + ex.getMessage());
        }
    }
}
0
ответ дан TongChen 20 January 2019 в 12:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: